2017-02-22 91 views
1

這裏抑制TS2339是代碼:試圖通過suppressExcessPropertyErrors編譯器選項

var x = {}; 
x.test = 'abc'; 

獲取打字稿編譯器錯誤:

TS2339: Property 'test' does not exist on type '{}'.

我要禁止這種警告的對象的文字,我想,把suppressExcessPropertyErrors進入tsconfig.json應該解決這個問題。

tsconfig:

{ 
    "compilerOptions": { 
     "suppressExcessPropertyErrors": true 
    }, 
    ... 
} 

但什麼都沒有改變..編譯器仍然顯示錯誤。

謝謝你的任何提示;)

回答

2

I suppose that putting suppressExcessPropertyErrors into tsconfig.json should solve this.

號它抑制在對象構造例如過量屬性

var x = {}; 
x = {test:'abc'}; 

I want to suppress this warning for object literals

你可以做任何你想要使用any類型如

var x:any = {}; 
x.test = 'abc'; 

更多

這被稱爲懶對象initiliazation和模式來處理它是這裏介紹:https://basarat.gitbooks.io/typescript/content/docs/tips/lazyObjectLiteralInitialization.html

+0

感謝您的回答,我發現「任何」解決方案之前,但我期待更多的通用的解決方案,使用config標誌將是最好的。我認爲/閱讀那個打字稿是「可選的」超集,所以「你可以在它旁邊使用標準的js」。但是這個案例表明它看起來不是真的。 – Luckylooke

+0

@basarat增加了我的5美分到這個答案 –

0

我可以通過一些點與同意@basarat,但請讓我也添加一些建議。

這樣的宣言對象道具可以一個有意義的幾個原因:

var x = { 
    test: '' 
}; 
x.test = 'abc'; 
  1. 您將獲得智能支持,在明年的時候,你會打電話給x對象,你會看到它的屬性這個對象包含。
  2. 適合測試。你會確信你的對象的構造不會在你的項目的某個地方被改變,並且可以編寫測試記住它。
  3. 你將避免重寫新的對象屬性。如果您聲明您的對象類型爲any,則可能是這種情況。

說明

// origin object x with originProp property 
var x: any = { 
    originProp: 'abc' 
}; 
// new object with new newProp property 
x = { 
    newProp:'abc' 
}; 
+0

有時我需要合併一些多個數據到一個對象的REST API請求,然後我想使用對象字面量。一切都很好,直到你需要一些條件的幾個屬性..把「任何」解決問題,但我認爲打字稿是可選的,恕我直言,它不應該把我推到「任何」解決方案..所有未指定的對象應默認爲「任何」類型。 – Luckylooke