Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Property 'XXX' does not exist on type 'CombinedVueInstance<Vue, {}, {}, {}, Readonly<Record<never, any>>>'

I created a vue component with TypeScript, and I'm getting this error in data() and in methods():

Property 'xxx' does not exist on type 'CombinedVueInstance<Vue, {}, {}, {}, Readonly<Record<never, any>>>'. 

For example:

33:18 Property 'open' does not exist on type 'CombinedVueInstance<Vue, {}, {}, {}, Readonly<Record<never, any>>>'.     31 |         methods: {     32 |             toggle: function () {   > 33 |                 this.open = !this.open        |                  ^     34 |                 if (this.open) {     35 |                     // Add click listener to whole page to close dropdown     36 |                     document.addEventListener('click', this.close) 

This error also shows any time this.close() is used.

This is the component:

<script lang='ts'>     import Vue from 'vue';     import axios from 'axios'     export default Vue.extend({         data: function () {             return {                 open: false             }         },         computed: {             profilePath: function () {                 return "/user/" + this.$store.state.profile.profile.user.id             }         },         methods: {             toggle: function () {                 this.open = !this.open                 if (this.open) {                     // Add click listener to whole page to close dropdown                     document.addEventListener('click', this.close)                 }             },             close: function () {                 this.open = false;                 document.removeEventListener('click', this.close)             }         }     }) </script> 

What is causing this error? It seems to still build in development with the errors, but they are causing issues when I deploy to production.

like image 738
Qwertie Avatar asked May 06 '19 09:05

Qwertie


1 Answers

As mentioned in the Typescript Support section of the Vue documentation:

Because of the circular nature of Vue’s declaration files, TypeScript may have difficulties inferring the types of certain methods. For this reason, you may need to annotate the return type on methods like render and those in computed.

In your case, you should change profilePath: function () { to profilePath: function (): string {

You might come across the same error if you have a render() method that returns a value, without a : VNode annotation.

like image 65
Tiago Avatar answered Sep 18 '22 03:09

Tiago