vuejs / core

🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
https://vuejs.org/
MIT License
47.87k stars 8.36k forks source link

The `inject` option in Mixins cant be inferred #7751

Open rudyxu1102 opened 1 year ago

rudyxu1102 commented 1 year ago

Vue version

3.2.47

Link to minimal reproduction

https://www.typescriptlang.org/play?#code/JYWwDg9gTgLgBAbzgEwKYDNgDtUGELgQ5bwC+c6UBcA5AG4CuqNAsAFDsDGRAzvALLAAHtgCCcALwoM2PAUjEYACgTs4cbACtUnGAC44AbRroIEGgF12pAJTsuvePnCTpmHM4WoSKtXBDC2DwGhoIiWKIWADR+nFCoAIYwqMhKNoh+6gD0WXCoQmA68DAAnoVwMBBwDFgA1lgQAO5YmXDcWDwQADaoAHRdEADmSjAAFsA8vaYQdmzqpNY2QA

Steps to reproduce

As you can see, there is a ts error in the minimal reproduction above.

import { defineComponent } from 'vue'

const MixinA = defineComponent({
  inject: ['foo']
})

const Comp = defineComponent({
  mixins: [MixinA],
  created() {
    // expect type to unknown
    console.log(this.foo)
  }
})

What is expected?

foo should be inferred to unknown.

What is actually happening?

ts error: Property 'foo' does not exist on type 'CreateComponentPublicInstance<{}, {}, {}, {}, {}, DefineComponent<{}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<...>, {}>, ... 12 more ..., {}>'

System Info

No response

Any additional comments?

No response

rudyxu1102 commented 1 year ago

Related to https://github.com/vuejs/vue/issues/12931