UNPKG

vue-function-api-sd

Version:

Provide logic composition capabilities for Vue.

39 lines (38 loc) 1.4 kB
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 {};