From 48f0d2944f0f9d2f556e62782fc61985897b2ed4 Mon Sep 17 00:00:00 2001 From: HcySunYang Date: Sat, 6 Feb 2021 02:56:23 +0800 Subject: [PATCH] fix(types): extract the correct props type for the DateConstructor (#2676) --- packages/runtime-core/src/componentProps.ts | 4 +++- test-dts/defineComponent.test-d.tsx | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index 03862b21687..f30c238e9da 100644 --- a/packages/runtime-core/src/componentProps.ts +++ b/packages/runtime-core/src/componentProps.ts @@ -97,7 +97,9 @@ type InferPropType = T extends null ? Record : T extends BooleanConstructor | { type: BooleanConstructor } ? boolean - : T extends Prop ? (unknown extends V ? D : V) : T + : T extends DateConstructor | { type: DateConstructor } + ? Date + : T extends Prop ? (unknown extends V ? D : V) : T export type ExtractPropTypes = O extends object ? { [K in RequiredKeys]: InferPropType } & diff --git a/test-dts/defineComponent.test-d.tsx b/test-dts/defineComponent.test-d.tsx index e28a82e1d37..949654b1b9e 100644 --- a/test-dts/defineComponent.test-d.tsx +++ b/test-dts/defineComponent.test-d.tsx @@ -34,6 +34,7 @@ describe('with object props', () => { ggg: 'foo' | 'bar' ffff: (a: number, b: string) => { a: boolean } validated?: string + date?: Date } type GT = string & { __brand: unknown } @@ -103,7 +104,8 @@ describe('with object props', () => { type: String, // validator requires explicit annotation validator: (val: unknown) => val !== '' - } + }, + date: Date }, setup(props) { // type assertion. See https://github.com/SamVerschueren/tsd @@ -125,6 +127,7 @@ describe('with object props', () => { expectType(props.ggg) expectType(props.ffff) expectType(props.validated) + expectType(props.date) // @ts-expect-error props should be readonly expectError((props.a = 1))