2016-10-26 84 views
0

地獄夥計,typescript 2.0:帶有默認值的參數

這是另一個typescript 2.0問題(啓用嚴格的空檢查模式)。所以,如果你定義一個具有缺省值的所有參數的函數:

(name = "Luis", age = 40)=>void 

那麼所有參數都認爲是可選的,也就是說,這是因爲如果我們有以下特徵:

(name?: string, age?: number) => void 

,對嗎?現在,當我們把這個簽名會發生什麼:

(name = "Luis", age: number) => void 

據VS代碼,該簽名是兼容:現在

(name: string, age: string) => void 

,如果我激活了嚴格的空檢查模式,應該不是下面的調用產生一個錯誤:

doIt(undefined, 30); 

它編譯好的,但如果我沒有錯,不確定只會被自動添加到類型可選參數列表。我還沒有找到任何對默認初始化參數的引用。

所以,如果以前的通話是好的,有人可以指向我可以在官方文檔中找到相關信息的地方嗎?

感謝,

路易斯

+0

提出的一個問題是什麼的'doIt方法()確切的簽名',你認爲應該引起編譯失敗? –

+0

你好丹。 好吧,在我的情況下,doIt會像這個函數doIt(name =「Luis」,年齡:數字){....}。 –

+0

這解釋了爲什麼沒有編譯時錯誤,但我看到@basarat已經解釋了爲什麼:) –

回答

1

快速注:在您不能指定默認只是簽名例如下面是一個錯誤:

declare var foo: (name = "Luis", age = 40) => void; // ERROR: defaults only allowed in implementation 

繼續以下代碼:

var foo = (name = "Luis", age: number) => null; 
foo(undefined, 123); 
foo(null, 123); // ERROR 

可見,namestringundefined兼容。工具提示是錯誤的,但一般分析是正確的。

隨意在https://github.com/Microsoft/TypeScript/issues