为数组中的对象定义键类型

时间:2019-07-18 15:46:47

标签: arrays typescript object types typescript-typings

我需要使变量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
} = {}

我从here那里获取了上面的代码。

有没有办法做到这一点?我可以使用最新版本的TypeScript。

1 个答案:

答案 0 :(得分:2)

我的建议是使用const assertion允许编译器跟踪TYPES_ARR中的特定字符串文字值,然后断言TYPES_GENERATED是{{3 }}(例如内置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);
});

希望有所帮助;祝你好运!

mapped type