2016-12-19 49 views
6

我下面舉個例子:爲什麼不打字稿抱怨某些未定義的變量

class Uncle { 
    constructor(public name : string) { } 

    talk() { 
    return "Hello my name is " + name; 
    } 
} 

let p : Uncle = new Uncle("Jo"); 
console.log(p.talk()); 

對於某些變量名,打字稿(現在版本2.1.4)將抱怨說,他們不在你的程序中定義(在方法說話中,名字在沒有這個的情況下被使用)。 name就是其中之一。

如果我重命名變量,比方說,firstName,編譯器會抱怨理所當然......

錯誤TS2663:找不到名稱「名字」。你的意思是實例成員'this.firstName'?

同樣適用於例如窗口,這顯然被認爲是存在的。

我的問題(S)是:

  • 這是假設變量名存在,爲什麼呢?
  • 是否可以改變這種行爲(例如,在某些情況下,您可以指出您希望全局可用的變量)?

回答

3

它不會抱怨name的原因是在全局命名空間中有一個名爲name的變量。
打開開發人員工具中的控制檯,然後編寫name並按Enter鍵,您將收到:""

更多資源:

所有的全局變量可以不定義它們被使用。

爲了移除所有的全局定義,例如在您的tsconfig.json中,將"libs"選項設置爲空數組。這將刪除全部全局變量。

+0

你知道是否有辦法解決這個問題? – flq

+0

打開什麼?變量'name'存在,你希望編譯器做什麼? –

+0

不一定例如當你爲node.js應用程序編寫代碼時,窗口和朋友不會存在。在這種情況下,如果編譯器不會假設這些全局變量的存在,那將會很好。 – flq

相關問題