键入[...]。map()不一致或使用箭头功能不一致

时间:2016-12-09 10:49:36

标签: typescript

见这个例子:

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类似于typecheck的行很好,因为strings的类型为(string | number)[]mapper只接受{{1}参数。

但是,如果我在string处使用lambda,我会收到预期的错误,因为numbers2类型为s,无法传递到(string | number)

是否有这样的原因,或者是否有一些“严格”的配置来获得预期的错误,或者它只是一个错误?

要运行该示例,请参阅:playground link

1 个答案:

答案 0 :(得分:2)

TypeScript github上存在类似的问题/建议(例如:https://github.com/Microsoft/TypeScript/issues/1394)。

目前,(s: string) => any已隐式转换为(s: string | number) => any。任何泛型参数的TypeScript编译器都认为它可以转换为“更宽”类型(协方差)。但对于功能参数相反的事物应该起作用(逆变)。目前TypeScript不支持它。