2016-12-09 10 views
3

この例を参照してください:。一貫性のないタイピング[...]マップ()ポイント無料または矢印機能付き

const strings = ['1', '2', 2]; 
const mapper = (s: string) => parseInt(s, 10); 
const numbers1 = strings.map(mapper); 
const numbers2 = strings.map(s => mapper(s)); 

この例では、細かいnumbers1 typechecksでラインを、それが原因ではないはずstringsはタイプが(string | number)[]であり、mapperは引数のみを受け入れます。私はnumbers2でラムダを使用する場合

は、しかし、私はsmapperに渡すことができないタイプ(string | number)であると予想されるエラーを取得しません。

これには理由がありますか、または予想されるエラーを得るための「厳密な」設定がありますか、それとも単にバグですか? playground link

答えて

2

同様の問題(例:https://github.com/Microsoft/TypeScript/issues/1394)活字体のgithubの上/提案があります:参照例を実行するには

現在、(s: string) => any(s: string | number) => anyに暗黙的にキャストされています。一般的な引数のためのTypeScriptコンパイラは、 "より広い"型(共分散)にキャストできると考えています。しかし、関数のパラメータに対しては、逆のことが働くはずです(反変数)。現在、TypeScriptはそれをサポートしていません。

関連する問題