首页 > 解决方案 > 从数组中定义对象的键类型

问题描述

我需要使变量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。

标签: arraystypescriptobjecttypestypescript-typings

解决方案


我的建议是使用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);
});

希望有帮助;祝你好运!

链接到代码


推荐阅读