From 9c9f8e885a6e7d1d1651998e3761345b091df3fd Mon Sep 17 00:00:00 2001 From: Kirill Romanov Date: Tue, 5 Oct 2021 03:19:19 +0300 Subject: [PATCH] fix: correct prop type inference when using PropType (#825) --- src/component/componentProps.ts | 4 +++- test-dts/defineComponent.test-d.ts | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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))