2017-06-20 91 views
1

我开始学习打字稿& Vuejs。Typescript/Vuejs没有编译计算属性

任何人都可以解释为什么我无法访问计算allChecked()数据中的帐户属性?

import * as Vue from "vue"; 

declare var accounts: any[];  

var app = new Vue({ 
    el: '#vueowner', 
    data: { 
     accounts: accounts, 
     hasAccount: this.accounts.length > 0, 
     checkedAccounts: [] 
    }, 
    computed: { 
     allChecked() { 
      return this.accounts.length === this.checkedAccounts.length; 
     } 
    } 
}) 

我有这样的错误

ERROR in index.ts 
(25,25): error TS2339: Property 'accounts' does not exist on type 'Vue'. 

ERROR in index.ts 
(25,50): error TS2339: Property 'checkedAccounts' does not exist on type 'Vue'. 
+0

什么是你 'VUE' 导入文件?一个d.ts文件? –

+0

是从Vuejs 2类型进口的 – Swell

回答

0

而不是

allChecked() { 
    return this.accounts.length === this.checkedAccounts.length; 
} 

尝试:

allChecked: function() { 
    return this.accounts.length === this.checkedAccounts.length; 
} 
+0

它给出了相同的错误 – Swell

1

在你allChecked方法this关键字未引用选项对象,你传递给构造函数Vue,但是它本身的类实例是Vue

您将需要创建一个扩展Vue与您要添加到原来的类属性的类:

import * as Vue from "vue"; 

class MyVue extends Vue { 
    accounts: any[]; 
    checkedAccounts: any[]; 
} 

const app = new MyVue({ 
    // (...) 
}) 

如果您需要关于使用Vue.js与打字稿看看这个页的详细信息: https://vuejs.org/v2/guide/typescript.html

+0

如果为true,为什么这条线在数据部分工作:hasAccount:this.accounts.length> 0? – Swell

+0

我猜想它正在编译(因为'this'应该有'any'类型),但不能按照你打算的那样工作(可能是'Can not read'length'undefined'在运行时)。它肯定应该是'hasAccounts:accounts.length'。 – Lyrkan

0

看起来您需要注释返回类型,因为TypeScript难以推断某些方法的类型。

所以不是

allChecked() { 
    return this.accounts.length === this.checkedAccounts.length; 
} 

试试这个

allChecked(): boolean { 
    return this.accounts.length === this.checkedAccounts.length; 
}