2016-11-27 28 views
3

爲什麼當我嘗試使用foo作爲Promise<string>時,以下示例不生成TypeScript編譯器警告(而不是在運行時失敗)?在TypeScript中檢查承諾類型參數嗎?

let foo: Promise<string> = Promise.resolve(10); // should not compile 
foo.then(v => v.toUpperCase()); 

// -> TypeError: v.toUpperCase is not a function 

只有當我把Promise.resolve<string>(10)做我得到一個錯誤,但不應該將需要作爲打字稿編譯器足夠聰明檢查時推斷RHS的類型爲Promise<number>。那麼當我嘗試完成這項任務時,爲什麼它不會吼我?此外,除了明確指定類型之外,是否有任何解決方法?我使用的是TypeScript 2.0.9。

回答

4

這似乎是一個known issue(也參見#10524,這是此問題的主要跟蹤問題),並且應該是fixed in v2.1.2通過鏈接的提交。按照預期,您應該能夠升級並且類型將被正確執行。

如果問題仍然存在於v2.1.x中,我的建議是報告問題跟蹤器中的錯誤。