Skip to content

Commit

Permalink
types(PropType): Allow undefined function to be used on PropType (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
pikax committed Aug 23, 2021
1 parent 9826382 commit afd49b3
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 1 deletion.
4 changes: 3 additions & 1 deletion packages/runtime-core/src/componentProps.ts
Expand Up @@ -66,7 +66,9 @@ type PropConstructor<T = any> =
| { (): T }
| PropMethod<T>

type PropMethod<T, TConstructor = any> = [T] extends [(...args: any) => any] // if is function with args
type PropMethod<T, TConstructor = any> = [T] extends [
((...args: any) => any) | undefined
] // if is function with args, allowing non-required functions
? { new (): TConstructor; (): T; readonly prototype: TConstructor } // Create Function like constructor
: never

Expand Down
3 changes: 3 additions & 0 deletions test-dts/defineComponent.test-d.tsx
Expand Up @@ -21,6 +21,7 @@ describe('with object props', () => {
b: string
e?: Function
h: boolean
j: undefined | (() => string | undefined)
bb: string
bbb: string
bbbb: string | undefined
Expand Down Expand Up @@ -55,6 +56,7 @@ describe('with object props', () => {
},
e: Function,
h: Boolean,
j: Function as PropType<undefined | (() => string | undefined)>,
// default value should infer type and make it non-void
bb: {
default: 'hello'
Expand Down Expand Up @@ -137,6 +139,7 @@ describe('with object props', () => {
expectType<ExpectedProps['b']>(props.b)
expectType<ExpectedProps['e']>(props.e)
expectType<ExpectedProps['h']>(props.h)
expectType<ExpectedProps['j']>(props.j)
expectType<ExpectedProps['bb']>(props.bb)
expectType<ExpectedProps['bbb']>(props.bbb)
expectType<ExpectedProps['bbbb']>(props.bbbb)
Expand Down

0 comments on commit afd49b3

Please sign in to comment.