从JS对象的属性和选项动态创建接口



在Typescript中是否可以这样做:

我有一个对象,它的键是属性,值是这些属性的选项数组:

const options = {
foo: [fooOption1, fooOption2, ...],
bar: [barOption1, barOption2, ...],
...
}

是否有可能创建一个接口,使

interface example {
foo: fooOption1 | fooOption2 | ...,
bar: barOption1 | barOption2 | ...,
...
}

首先,将options对象更改为常量:

const options = {
foo: ['fooOption1', 'fooOption2'],
bar: ['barOption1', 'barOption2']
} as const;
然后,您可以通过将每个数组映射到联合来创建所需的接口:

type OptionsInterface = {
[K in keyof typeof options]: typeof options[K][number]
}

const xx: OptionsInterface = {
foo: 'fooOption1',
bar: 'barOptionError' // Expected error: 
// Type '"barOptionError"' is not assignable to type '"barOption1" | "barOption2"'.(2322)
}

:

<
  • 映射类型/gh>TypeScript:从字符串数组中定义一个联合类型

最新更新