diff --git a/src/component/componentProps.ts b/src/component/componentProps.ts index c27ff15f..d01ee3ed 100644 --- a/src/component/componentProps.ts +++ b/src/component/componentProps.ts @@ -51,13 +51,15 @@ type InferPropType = T extends null ? Record : T extends BooleanConstructor | { type: BooleanConstructor } ? boolean - : T extends FunctionConstructor - ? Function - : T extends Prop - ? unknown extends V - ? D - : ExtractCorrectPropType - : T + : T extends DateConstructor | { type: DateConstructor} + ? Date + : T extends FunctionConstructor + ? Function + : T extends Prop + ? unknown extends V + ? D + : ExtractCorrectPropType + : T export type ExtractPropTypes = O extends object ? { [K in RequiredKeys]: InferPropType } & diff --git a/test-dts/defineComponent.test-d.ts b/test-dts/defineComponent.test-d.ts index cd0b56a9..bdd033cc 100644 --- a/test-dts/defineComponent.test-d.ts +++ b/test-dts/defineComponent.test-d.ts @@ -27,6 +27,7 @@ describe('with object props', () => { ggg: 'foo' | 'bar' ffff: (a: number, b: string) => { a: boolean } validated?: string + date: Date } type GT = string & { __brand: unknown } @@ -96,6 +97,10 @@ describe('with object props', () => { // validator requires explicit annotation validator: (val: unknown) => val !== '', }, + date: { + type: Date, + required: true, + }, }, setup(props) { // type assertion. See https://github.com/SamVerschueren/tsd @@ -116,6 +121,7 @@ describe('with object props', () => { expectType(props.hhh) expectType(props.ffff) expectType(props.validated) + expectType(props.date) isNotAnyOrUndefined(props.a) isNotAnyOrUndefined(props.b)