vue: Property 'xxx' does not exist on type CombinedVueInstance ?
Version
2.5.17
Reproduction link
Steps to reproduce
- use vue-cli init a ts hello-world project .
- code like that
<script lang="ts">
import Vue from "vue";
export default Vue.extend({
name: "HelloWorld",
props: {
msg: String
},
data():any {
return {
wtf: this.initData(), // throw ts error : Property 'initData' does not exist on type 'CombinedVueInstance<Vue, {}, {}, {}, Readonly<{ msg: string; }>>'.
}
},
methods: {
initData():any {
return {
a: ''
}
},
},
});
</script>
What is expected?
How can i fix it ?
What is actually happening?
Property ‘initData’ does not exist on type ‘CombinedVueInstance<Vue, {}, {}, {}, Readonly<{ msg: string; }>>’.
About this issue
- Original URL
- State: open
- Created 6 years ago
- Reactions: 88
- Comments: 56 (6 by maintainers)
Commits related to this issue
- issue: https://github.com/vuejs/vue/issues/8721 — committed to nextprops/vue-typescript-tsx by nextprops 6 years ago
- fix: cmon typescript see https://github.com/vuejs/vue/issues/8721#issuecomment-574892176 — committed to krmax44/clef.ninja by krmax44 4 years ago
- Fix typing errors from calling methods Typescript can't find methods unless computed properties are annotated, see https://github.com/vuejs/vue/issues/8721 — committed to 3starblaze/mini-tomato-timer by deleted user 4 years ago
- workaround vuejs/vue#8721 — committed to NiceOrg/timey by Shuunen 3 years ago
- fix: Vue.jsとTypeScript相性悪い問題に遭遇したため戻り値を明示的に指定して解消した https://github.com/vuejs/vue/issues/8721 — committed to MofuMofu2/vue2-cypress-sandbox by MofuMofu2 2 years ago
- fix: fix type inference issues See https://github.com/vuejs/vue/issues/8721 — committed to fatadel/wade by fatadel 2 years ago
EDIT: See @IAMtheIAM’s answer below
I had this error while working inside of a computed property. My data and computed were organized like this:
It would give me the same error (
Property myDataPoint does not exist on type CombinedVueInstance…)However, when I declared what type would be returned by the function, the error went away: (look to the
trueOrFalsecomputed property for the change)Hope this helps!
Since this appears to be only a typing issue and not a runtime issue, there is an (ugly?) workaround available: cast
thisas typeany:Additionally omit the
()to store a reference to the method that is executable outside of the current scope, e.g. if you pass it to a child via a prop.So is this the proposed solution at the moment?
This happens for all my methods and data properties. What’s the solution?
UPDATE: Apparently, you have to annotate the return type for your computed methods, otherwise all your
methodsanddataproperties won’t appear to typescript as if they are on theCombinedVueInstance. As soon as I did that, all errors went away regarding this.+1 in 2021. 😅
TL:DR for anybody else coming from Google after hours of searching:
Hope it helps
Solution from @tipsy solved it for me. My use case was using
mapState.this.plantsinplantData()was previously always yielding an error and couldn’t be found on the Vue instance.Declare the return type worked for me as well… But such strange behavior.
I had the same error after adding head() section to nuxt vue page. After adding return type :any to head, the error disappeared. Maybe this will be helpful to somebody.
head(): any {
I also have this problem in vscode
I’m very new to TypeScript. I tried all the advice here without any success, but I managed to build on @danjohnso’s workaround to “solve” this with intersection types:
export default (Vue as VueConstructor<Vue & Interface1 & Interface2>).extend({I have no idea if doing that is bad, but everything seems to work fine.
Edit: My issue is with properties from mixins not being recognized.
For those experiencing the same error thrown as a result of using mixins in Vue 2.x, I’m going to dump some information and the solutions I found in my research below.
Here’s a helpful explanation of why you’re having this problem:
After researching and reading around online, the consensus everywhere (including this thread) seems to be that in order to get proper mixin typings without any complications or workarounds, you’ll want to upgrade to Vue 3.
If that isn’t an option for you right now, this answer is what helped us overcome it. We went with option 1 until we can discuss option 2, and it will do until we can find a less limiting solution.
Here are some other solutions I came across today:
It’s still there in 3.0
InstanceType<typeof mixin>or use this mixins utility I made for Vuetify: https://github.com/vuetifyjs/vuetify/blob/master/packages/vuetify/src/util/mixins.tsVue 3 has proper typings for mixins.
I still struggling with this error. Declaring the return type on computed properties solve part of the errors. But it does not work for :
Anyone know how to fix this without using the ‘ugly’ workaround
(this as any)?Having the same issue when using the new Vue.js Composition API with vscode-insiders. The code compiles without TS errors but vscode shows an error nonetheless.
Details Version: typescript 3.8.3, eslint 6.8.0
Possible related issues: #23987, #29511 #32573 #34999
Type declaration didn’t work here either as a workaorund. So this failed too in vscode:
I had this issue until I gave all my computed properties return types. However, Jest unit tests continued to throw the same TypeScript error.
I had to alter my expectation to follow this pattern:
Yuk! I hope this can be resolved soon.
I guess we should remove
thistype fromdataoption function and make it as the same as other functionthistype. The use case that OP provides looks totally valid.I also faced another use case which I need comprehensive
thistype indatafunction when writing some function in it.As a similar case,
thistype ofbeforeCreateseems also to be removed.But they probably breaks existing apps type checking as we need to explicitly declare
datafunction return type since it no longer infers return type ofdatadue to this restriction. I’m not sure how much the change affects the existing apps…Adding a type to all computed properties fixed it here.
I am still experiencing the problems described in this ticket… 😕
My Setup:
defineComponentI typed all return types of methods in computed / data. Typescript still says, that props being used in a method in computed / lifecycle / methods do not exist…
Update
It turned out, that the problem was the way, how my prop validator is written:
validator(value: string) {=> props not defined when using in computed / lifecycle methodsvalidator: (value: string) => {=> props all working when using in computed / lifecycle methodsAfter I figured it out, I have found other tickets describing this issue:
Thanks @IAMtheIAM, your hint solved it for me. I was having the issue with
methodsthat called vuex actions - and I thought initially the error might be in the type resolution for the vuex actions somehow. But it turned out I had added anothercomputedproperty in the component that did not have a return type set. Adding this one solved it for my case.We can’t turn on strict mode yet. However, we migrated to Vue 3 in the meantime. From our side this issue is not relevant anymore.
https://github.com/vuejs/vue/issues/8721#issuecomment-671060954 works for me as well! Thanks!

I really can’t believe this nightmare for not using decorators, Even using a lot of typescript (
Vues as VueConstructor...), It doesn’t infers the types at all, and you can’t access computed properties between them. This is such a downer. Thank you for you help everyoneAfter explicitly typing out the return type of the
getHeight()function the errors went away. I’m glad i found this fix. Thanks to everyone 😃Typescript 3.9 has made this even worse, I have to specify return types for methods too now.
@stoically https://github.com/microsoft/TypeScript/issues/34999?
👍
vue-tsx-support
Same here. Vue 2.5 has better type declaration support for TypeScript but this seems broken.