diff --git a/src/component/componentProps.ts b/src/component/componentProps.ts index bcd7e737..d522f2ff 100644 --- a/src/component/componentProps.ts +++ b/src/component/componentProps.ts @@ -63,7 +63,9 @@ type InferPropType = T extends null ? Function : T extends Prop ? unknown extends V - ? D + ? D extends null | undefined + ? V + : D : ExtractCorrectPropType : T diff --git a/test-dts/defineComponent.test-d.ts b/test-dts/defineComponent.test-d.ts index 8856d832..f1305dfb 100644 --- a/test-dts/defineComponent.test-d.ts +++ b/test-dts/defineComponent.test-d.ts @@ -28,6 +28,7 @@ describe('with object props', () => { ffff: (a: number, b: string) => { a: boolean } validated?: string date: Date + unknown: unknown } type GT = string & { __brand: unknown } @@ -100,6 +101,10 @@ describe('with object props', () => { type: Date, required: true, }, + unknown: { + type: Object as PropType, + default: null, + }, }, setup(props) { // type assertion. See https://github.com/SamVerschueren/tsd @@ -121,6 +126,7 @@ describe('with object props', () => { expectType(props.ffff) expectType(props.validated) expectType(props.date) + expectType({} as ExpectedProps['unknown']) isNotAnyOrUndefined(props.a) isNotAnyOrUndefined(props.b) @@ -171,6 +177,7 @@ describe('with object props', () => { expectType(props.hhh) expectType(props.ffff) expectType(props.validated) + expectType({} as ExpectedProps['unknown']) // @ts-expect-error props should be readonly expectError((props.a = 1))