From 027045bc78426cf8b5711959b92e2487950b35fb Mon Sep 17 00:00:00 2001 From: zhangyu96 Date: Mon, 6 Sep 2021 20:28:51 +0800 Subject: [PATCH 1/2] fix(type): fix prop type infer --- packages/runtime-core/src/componentProps.ts | 8 ++++---- test-dts/defineComponent.test-d.tsx | 5 ++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index cca7fbcdc72..fd3b998e8c1 100644 --- a/packages/runtime-core/src/componentProps.ts +++ b/packages/runtime-core/src/componentProps.ts @@ -109,10 +109,10 @@ type InferPropType = [T] extends [null] ? boolean : [T] extends [DateConstructor | { type: DateConstructor }] ? Date - : [T] extends [ - (DateConstructor | infer U)[] | { type: (DateConstructor | infer U)[] } - ] - ? Date | InferPropType + : [T] extends [(infer U)[] | { type: (infer U)[] }] + ? U extends Date + ? Date | InferPropType + : InferPropType : [T] extends [Prop] ? unknown extends V ? D diff --git a/test-dts/defineComponent.test-d.tsx b/test-dts/defineComponent.test-d.tsx index fb50648b579..8604f8e9fbd 100644 --- a/test-dts/defineComponent.test-d.tsx +++ b/test-dts/defineComponent.test-d.tsx @@ -44,6 +44,7 @@ describe('with object props', () => { date?: Date l?: Date ll?: Date | number + lll?: string | number } type GT = string & { __brand: unknown } @@ -135,7 +136,8 @@ describe('with object props', () => { }, date: Date, l: [Date], - ll: [Date, Number] + ll: [Date, Number], + lll: [String, Number] }, setup(props) { // type assertion. See https://github.com/SamVerschueren/tsd @@ -170,6 +172,7 @@ describe('with object props', () => { expectType(props.date) expectType(props.l) expectType(props.ll) + expectType(props.lll) // @ts-expect-error props should be readonly expectError((props.a = 1)) From 3d66e65139f7334d56020406881b45628aa9fa4f Mon Sep 17 00:00:00 2001 From: zhangyu96 Date: Mon, 6 Sep 2021 22:33:30 +0800 Subject: [PATCH 2/2] update --- packages/runtime-core/src/componentProps.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index fd3b998e8c1..924f40a7384 100644 --- a/packages/runtime-core/src/componentProps.ts +++ b/packages/runtime-core/src/componentProps.ts @@ -110,7 +110,7 @@ type InferPropType = [T] extends [null] : [T] extends [DateConstructor | { type: DateConstructor }] ? Date : [T] extends [(infer U)[] | { type: (infer U)[] }] - ? U extends Date + ? U extends DateConstructor ? Date | InferPropType : InferPropType : [T] extends [Prop]