Можно ли в Typescript сделать следующее:

У меня есть объект, ключи которого являются свойствами, а значения - массивом параметров для этих свойств:

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

Можно ли создать такой интерфейс, чтобы

interface example {
  foo: fooOption1 | fooOption2 | ...,
  bar: barOption1 | barOption2 | ...,
  ...
}
0
arcrub 22 Фев 2021 в 01:46

1 ответ

Лучший ответ

Во-первых, измените объект параметров на константу:

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)
}

Видеть:

1
Lesiak 21 Фев 2021 в 23:38