arrays - 可以在 Typescript 中的数组联合上安全地调用 Array.map 吗?
问题描述
使用数组类型的联合(不是联合数组,例如Foo[] | Bar[]
not (Foo|Bar)[]
),是否可以在联合上调用类似 Array.prototype.map 的内容,以安全地将每个联合变体映射到具有相同类型的新值(例如,相同的变体,但可能会更改某些字段等)。
这是一个例子:
type HomogenousLetters = 'a'[] | 'b'[];
const array: HomogenousLetters = ['a', 'a', 'a'] as HomogenousLetters;
现在,假设我们想在这个数组和同一个 union 变体之一之间进行映射。我们可能想调用Array.prototype.map
,但即使在微不足道的情况下也无法编译。
// ERROR: Type '("a" | "b")[]' is not assignable to type '"a"[] | "b"[]'.
const mappedArray: HomogenousLetters = array.map((letter) => letter);
我理解这是合理的行为 - Array.prototype.map() 的类型签名不能保证同质输入会产生同质输出(即数组中的每个“字母”都将具有相同的联合变体),但在这种情况下,我们如何确保这一点?
解决方案
推荐阅读
- bash - 将时间戳附加到 grep 输出
- postgresql - 如何计算记录在特定月份出现的天数?
- ansible - ansible hcloud set_fact 从字典中的列表中添加项目
- c# - 在另一个 WPF 窗口的标签上显示按钮的内容
- javascript - 如何使用 ES6/ES2015 模块(本机支持)设置基本的 Angular 8 应用程序?
- javascript - javascript中的隐式强制
- java - 如何将数据从片段传递到适配器
- reactjs - 使用 Promise 时 API 调用被拒绝
- c# - 生成的对象未销毁问题
- google-chrome-extension - 管理员管理的 Chrome 扩展需要什么才能接受上传到控制台的配置 JSON?