vue-function-api-sd
Version:
Provide logic composition capabilities for Vue.
39 lines (38 loc) • 1.4 kB
TypeScript
import { Data } from './component';
export declare type ComponentPropsOptions<P = Data> = {
[K in keyof P]: Prop<P[K]> | null;
};
declare type Prop<T> = PropOptions<T> | PropType<T>;
interface PropOptions<T = any> {
type?: PropType<T> | null;
required?: boolean;
default?: T | null | undefined | (() => T | null | undefined);
validator?(value: any): boolean;
}
export declare type PropType<T> = PropConstructor<T> | PropConstructor<T>[];
declare type PropConstructor<T> = {
new (...args: any[]): T & object;
} | {
(): T;
};
declare type RequiredKeys<T, MakeDefautRequired> = {
[K in keyof T]: T[K] extends {
required: true;
} | (MakeDefautRequired extends true ? {
default: any;
} : never) ? K : never;
}[keyof T];
declare type OptionalKeys<T, MakeDefautRequired> = Exclude<keyof T, RequiredKeys<T, MakeDefautRequired>>;
declare type InferPropType<T> = T extends null ? any : T extends {
type: null;
} ? any : T extends ObjectConstructor | {
type: ObjectConstructor;
} ? {
[key: string]: any;
} : T extends Prop<infer V> ? V : T;
export declare type ExtractPropTypes<O, MakeDefautRequired extends boolean = true> = {
readonly [K in RequiredKeys<O, MakeDefautRequired>]: InferPropType<O[K]>;
} & {
readonly [K in OptionalKeys<O, MakeDefautRequired>]?: InferPropType<O[K]>;
};
export {};