2017-06-20 89 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; 
}