diff --git a/packages/dts-test/setupHelpers.test-d.ts b/packages/dts-test/setupHelpers.test-d.ts index feb4085dea0..838e376da2d 100644 --- a/packages/dts-test/setupHelpers.test-d.ts +++ b/packages/dts-test/setupHelpers.test-d.ts @@ -8,7 +8,8 @@ import { defineSlots, VNode, Ref, - defineModel + defineModel, + toRefs } from 'vue' import { describe, expectType } from './utils' import { defineComponent } from 'vue' @@ -20,6 +21,7 @@ describe('defineProps w/ type declaration', () => { foo: string bool?: boolean boolAndUndefined: boolean | undefined + file?: File | File[] }>() // explicitly declared type should be refined expectType(props.foo) @@ -328,3 +330,11 @@ describe('useSlots', () => { const slots = useSlots() expectType(slots) }) + +// #6420 +describe('toRefs w/ type declaration', () => { + const props = defineProps<{ + file?: File | File[] + }>() + expectType>(toRefs(props).file) +}) diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts index 93200667081..cff0c6511e2 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -4,7 +4,8 @@ import { isFunction, Prettify, UnionToIntersection, - extend + extend, + LooseRequired } from '@vue/shared' import { getCurrentInstance, @@ -82,7 +83,7 @@ export function defineProps< >(props: PP): Prettify>> // overload 3: typed-based declaration export function defineProps(): DefineProps< - TypeProps, + LooseRequired, BooleanKey > // implementation