213 - Vue Basic Props
Opened this issue · 0 comments
koSakano commented
type ComputedType<C> = { [P in keyof C]: C[P] extends () => infer R ? R : never }
type PropsType<P> = {
[K in keyof P]: P[K] extends {}
? 'type' extends keyof P[K]
? PropsTypeType<P[K]['type']>
: PropsTypeType<P[K]>
: PropsTypeType<P[K]>
}
type PropsTypeType<T> = T extends Array<any> ? ExtractType<T[number]> : ExtractType<T>
type ExtractType<T> = T extends (...args: any) => infer R ? R : T extends new (...args: any) => infer R2 ? R2 : any
type Options<P, D, C, M> = {
props: P
data: (this: PropsType<P>) => D
computed: C & ThisType<D & ComputedType<C> & M & PropsType<P>>
methods: M & ThisType<D & ComputedType<C> & M & PropsType<P>>
}
declare function VueBasicProps<P, D, C, M>(options: Options<P, D, C, M>): any