E extends EmitsOptions = EmitsOptions,
EE extends string = string,
Provide extends ComponentProvideOptions = ComponentProvideOptions,
- Options extends {} = {}
+ Options extends ComponentOptionsWithoutProps<
+ Props,
+ RawBindings,
+ D,
+ C,
+ M,
+ Mixin,
+ Extends,
+ E,
+ EE,
+ Provide
+ > = ComponentOptionsWithoutProps<
+ Props,
+ RawBindings,
+ D,
+ C,
+ M,
+ Mixin,
+ Extends,
+ E,
+ EE,
+ Provide
+ >
>(
options: Options &
ComponentOptionsWithoutProps<
E extends EmitsOptions = Record<string, any>,
EE extends string = string,
Provide extends ComponentProvideOptions = ComponentProvideOptions,
- Options extends {} = {}
+ Options extends ComponentOptionsWithArrayProps<
+ PropNames,
+ RawBindings,
+ D,
+ C,
+ M,
+ Mixin,
+ Extends,
+ E,
+ EE,
+ Provide
+ > = ComponentOptionsWithArrayProps<
+ PropNames,
+ RawBindings,
+ D,
+ C,
+ M,
+ Mixin,
+ Extends,
+ E,
+ EE,
+ Provide
+ >
>(
options: Options &
ComponentOptionsWithArrayProps<
E extends EmitsOptions = Record<string, any>,
EE extends string = string,
Provide extends ComponentProvideOptions = ComponentProvideOptions,
- Options extends {} = {}
+ Options extends ComponentOptionsWithObjectProps<
+ PropsOptions,
+ RawBindings,
+ D,
+ C,
+ M,
+ Mixin,
+ Extends,
+ E,
+ EE,
+ Provide
+ > = ComponentOptionsWithObjectProps<
+ PropsOptions,
+ RawBindings,
+ D,
+ C,
+ M,
+ Mixin,
+ Extends,
+ E,
+ EE,
+ Provide
+ >
>(
options: Options &
ComponentOptionsWithObjectProps<
import {
describe,
+ test,
Component,
defineComponent,
PropType,
})
describe('componentOptions setup should be `SetupContext`', () => {
- expect<ComponentOptions['setup']>(
+ expectType<ComponentOptions['setup']>(
{} as (props: Record<string, any>, ctx: SetupContext) => any
)
})
vm.a = 2
})
+// #5948
+describe('DefineComponent should infer correct types when assigning to Component', () => {
+ let component: Component
+ component = defineComponent({
+ setup(_, { attrs, slots }) {
+ // @ts-expect-error should not be any
+ expectType<[]>(attrs)
+ // @ts-expect-error should not be any
+ expectType<[]>(slots)
+ }
+ })
+ expectType<Component>(component)
+})
+
// check if defineComponent can be exported
export default {
// function components
export * from '@vue/runtime-dom'
export function describe(_name: string, _fn: () => void): void
+export function test(_name: string, _fn: () => any): void
export function expectType<T>(value: T): void
export function expectError<T>(value: T): void
? false
: true
-export type IsAny<T> = 0 extends (1 & T) ? true : false
+export type IsAny<T> = 0 extends 1 & T ? true : false