瀏覽代碼

types(runtime-core): fix for multiple possible prop types including Date (#4518)

fix #4517
Husam Ibrahim 4 年之前
父節點
當前提交
4645a42b79
共有 2 個文件被更改,包括 11 次插入1 次删除
  1. 4 0
      packages/runtime-core/src/componentProps.ts
  2. 7 1
      test-dts/defineComponent.test-d.tsx

+ 4 - 0
packages/runtime-core/src/componentProps.ts

@@ -109,6 +109,10 @@ type InferPropType<T> = [T] extends [null]
   ? boolean
   ? boolean
   : [T] extends [DateConstructor | { type: DateConstructor }]
   : [T] extends [DateConstructor | { type: DateConstructor }]
   ? Date
   ? Date
+  : [T] extends [
+      (DateConstructor | infer U)[] | { type: (DateConstructor | infer U)[] }
+    ]
+  ? Date | InferPropType<U>
   : [T] extends [Prop<infer V, infer D>]
   : [T] extends [Prop<infer V, infer D>]
   ? unknown extends V
   ? unknown extends V
     ? D
     ? D

+ 7 - 1
test-dts/defineComponent.test-d.tsx

@@ -42,6 +42,8 @@ describe('with object props', () => {
     kkk?: any
     kkk?: any
     validated?: string
     validated?: string
     date?: Date
     date?: Date
+    l?: Date
+    ll?: Date | number
   }
   }
 
 
   type GT = string & { __brand: unknown }
   type GT = string & { __brand: unknown }
@@ -131,7 +133,9 @@ describe('with object props', () => {
         // validator requires explicit annotation
         // validator requires explicit annotation
         validator: (val: unknown) => val !== ''
         validator: (val: unknown) => val !== ''
       },
       },
-      date: Date
+      date: Date,
+      l: [Date],
+      ll: [Date, Number]
     },
     },
     setup(props) {
     setup(props) {
       // type assertion. See https://github.com/SamVerschueren/tsd
       // type assertion. See https://github.com/SamVerschueren/tsd
@@ -164,6 +168,8 @@ describe('with object props', () => {
       expectType<ExpectedProps['kkk']>(props.kkk)
       expectType<ExpectedProps['kkk']>(props.kkk)
       expectType<ExpectedProps['validated']>(props.validated)
       expectType<ExpectedProps['validated']>(props.validated)
       expectType<ExpectedProps['date']>(props.date)
       expectType<ExpectedProps['date']>(props.date)
+      expectType<ExpectedProps['l']>(props.l)
+      expectType<ExpectedProps['ll']>(props.ll)
 
 
       // @ts-expect-error props should be readonly
       // @ts-expect-error props should be readonly
       expectError((props.a = 1))
       expectError((props.a = 1))