Subscribe on changes!

DefineComponent<typeof MyPropsObject> ruturn `ComponentPublicInstanceConstructo<any, any, ...>`

avatar
Sep 21st 2020

Version

3.0.0

Reproduction link

https://codesandbox.io/s/vue-3-ce53j?fontsize=14&hidenavigation=1&theme=dark

Steps to reproduce

I want to define my Component type using DefineComponent, something like:

type MyComponentType = DefineComponent<MyComponentPropsObject>

but the type returned is not correct, it returns ComponentPublicInstanceConstructo<any, any, ...>

What is expected?

return the correct type

What is actually happening?

return type not correct, it returns:

ComponentPublicInstanceConstructor<any, any, any, any, Record<string, ComputedGetter<any> | WritableComputedOptions<any>>, MethodOptions> & ComponentOptionsBase<...> & VNodeProps & AllowedComponentProps & ComponentCustomProps

did not find any online code editor support ts

avatar
Sep 22nd 2020

The "reproduction link" is just a template, not a reproduction of your issue.

Please provide actual code.

avatar
Sep 22nd 2020

@pikax it's the case where user directly tries to use the DefineComponent type with optional generic arguments:

function test(C: DefineComponent<{ foo: string }>) {
  const c = new C() // type of c is `any`
}

Because optional RawBinding and D defaulting to any and then intersected on to the instance type.

avatar
Sep 23rd 2020

Ah, why don't you just say type A = DefineComponent<typeof FiledPropsDefine, {}, {}> will solve this problem...