From 4178d5d7d9549a0a1d19663bc2f92c8ac6a731b2 Mon Sep 17 00:00:00 2001 From: fishDog <40156382+Bigfish8@users.noreply.github.com> Date: Tue, 7 Sep 2021 03:24:15 +0800 Subject: [PATCH] fix(type): fix prop type infer (#4530) fix #4525 --- 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..924f40a7384 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 DateConstructor + ? 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))