typescript - 将字符串数组转换为字典
问题描述
我希望能够将字符串数组转换为字典,其中传入的字符串成为对象的键(并且值设置为true
):
// obj = { foo: true, bar: true );
const obj = toObject("foo", "bar");
这在运行时使用 JS 非常简单,但我希望将类型保留在 TS 中,这非常具有挑战性。这是一个在运行时工作但最终以all
. 呸。
function toObject<T extends readonly string[]>(...keys: T) {
return keys.reduce((acc, k) => {
acc[k] = true;
return acc;
}, {} as any);
}
我们的值为零,但它仍然比在减速器中all
不说明要好。as any
至少我们可以在运行时索引字典。如果我们不理会它,该类型将是一个空对象。相反,我需要的是某种将字符串数组转换为字符串并集的方法。一旦我有了,我可以简单地输入减速器的初始状态:
{} as Record<UnionOfStrings, true>;
也就是说,我无法弄清楚如何进行这种转换。
有谁知道怎么做?
解决方案
您实际上并不需要为此使用.reduce
它,因为它实际上并不比仅使用普通的for
循环简单得多。这是我使用循环编写的实现,但如果您愿意,for
也可以使用它来编写。.reduce
function toObject<T extends readonly string[]>(...keys: T): Record<T[number], true> {
const obj: Record<string, true> = {};
for (const key of keys) {
obj[key] = true;
}
return obj;
}
注意返回类型:Record<T[number], true>
. 我想这就是你要找的。
推荐阅读
- javascript - Google Analytics 嵌入示例不起作用
- amazon-web-services - 您需要互联网连接才能使用 Amazon rekognition 还是可以在离线应用程序中使用?
- ios - 从单独的应用程序目标加载 XIB
- python - Python指定文件位置目录
- reverse-engineering - 使用 Ollydbg 修改内存
- apache-spark - 如何将配置从 spark-submit 传递到纱线集群?
- search - NetSuite 保存的销售订单子列表搜索(相关记录)
- swift - 尤里卡表单不显示
- sql - 编码 ASP.NET Core 和 SQL Server 的问题
- git - 强制推送 git 预接收挂钩错误