arrays - 从数组中定义对象的键类型
问题描述
我需要使变量TYPES_GENERATED
具有它在数组TYPES_ARR
中具有symbol
值的键的类型。
const TYPES_ARR = [
'HttpClient',
'Parser'
]
const TYPES_GENERATED = {}
TYPES_ARR.forEach(i => {
TYPES_GENERATED[i] = Symbol.for(i)
})
我不想写:
const TYPES_GENERATED: {
HttpClient: symbol
Parser: symbol
} = {}
我从这里获取了上面的代码。
有没有办法做到这一点?我可以使用最新版本的 TypeScript。
解决方案
我的建议是使用const
断言来允许编译器跟踪 中的特定字符串文字值TYPES_ARR
,然后断言这TYPES_GENERATED
是一个映射类型(例如内置Record<K, V>
),具有来自元素的键TYPES_ARR
和类型的值symbol
:
const TYPES_ARR = ["HttpClient", "Parser"] as const;
const TYPES_GENERATED = {} as Record<typeof TYPES_ARR[number], symbol>;
TYPES_ARR.forEach(i => {
TYPES_GENERATED[i] = Symbol.for(i);
});
希望有帮助;祝你好运!
推荐阅读
- sql - 雪花数据库中的摄取错误
- php - 在存储中使用 PHP GD 保存调整大小的图像:
- jpa - 使用 @SecondaryTables 但将字段本身放在单独的类中
- php - TCPDF 错误:[图像] 无法获取图像:/userers/../vendor/tcpdf/cache/img_8e7e19ef238db432ed8af1caa9ffe395
- jquery - 预加载 img 以显示 div 背景是否正确?
- python - 如何处理 findspark.init() 索引错误?
- kubernetes - 在 configmap 中使用 Kubernetes 机密
- openshift - 为什么从 oc new-app (source strategy) 生成的 imagestream spec 元素是空的?
- java - 使用 java 流根据特定检查更新对象
- netlogo - Netlogo Extensions API - 如何提醒用户错误?