types(defineComponent): fix optional Boolean prop types (#2401)

fix #2338
This commit is contained in:
Carlos Rodrigues
2020-10-19 22:25:55 +01:00
committed by GitHub
parent 8e5cdc0d0e
commit d9ad45ad6c
3 changed files with 48 additions and 2 deletions

View File

@@ -65,13 +65,28 @@ type PropMethod<T, TConstructor = any> = T extends (...args: any) => any // if i
: never
type RequiredKeys<T> = {
[K in keyof T]: T[K] extends { required: true } | { default: any } ? K : never
[K in keyof T]: T[K] extends
| { required: true }
| { default: any }
// don't mark Boolean props as undefined
| BooleanConstructor
| { type: BooleanConstructor }
? K
: never
}[keyof T]
type OptionalKeys<T> = Exclude<keyof T, RequiredKeys<T>>
type DefaultKeys<T> = {
[K in keyof T]: T[K] extends { default: any } ? K : never
[K in keyof T]: T[K] extends
| { default: any }
// Boolean implicitly defaults to false
| BooleanConstructor
| { type: BooleanConstructor }
? T[K] extends { type: BooleanConstructor; required: true } // not default if Boolean is marked as required
? never
: K
: never
}[keyof T]
type InferPropType<T> = T extends null