typescript - 不一致的输入 [...].map() 点自由或箭头功能

标签 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 的行类型检查正常,它不应该因为 strings 的类型为 (string | number)[],而 mapper 只接受 string 参数。

但是,如果我在 numbers2 处使用 lambda,我会得到预期的错误,因为 s(string | number) 类型,它可以不会被传递到 mapper

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

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

最佳答案

TypeScript github 上有类似的问题/提案(例如:https://github.com/Microsoft/TypeScript/issues/1394)。

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

关于typescript - 不一致的输入 [...].map() 点自由或箭头功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41058690/

相关文章:

node.js - EXPORT 在部署在 pm2 中的 ts 文件 Node 应用程序中不起作用

javascript - 无法以 Angular 7 导出 excel (xlsm) - 使用 spring boot 后端

typescript - 如何将 SockJS 添加到 Angular 2 项目中?

javascript - Angular2 - 类属性未定义,即使它正在设置

javascript - 在 Angular2 中导入接口(interface)

Angular2 Firebase 设置用户自定义属性

node.js - 如何在 TypeScript 文件中要求 NodeJS?

typescript - 通用类型扩展联合不会被类型保护缩小

javascript - 如何使用 FileUpload 向受 Azure AD 保护的 REST API 发出 REST API 发布请求

javascript - 如何在 typescript 的公共(public)函数中初始化Http导入?