Typescript: Enum из ключей интерфейса - PullRequest
1 голос
/ 23 января 2020

У меня есть интерфейс:

interface ISomething {
  red: string;
  blue: string;
  green: string;
}

Можно ли определить Enum, который будет представлять ключи от интерфейса?

Я хотел бы получить такой результат:

enum SomethingKeys {
   red = "red",
   blue= "blue",
   green= "green",
}

пс: я новичок ie в тс, извините, если вопрос не правильный.

1 Ответ

2 голосов
/ 23 января 2020

Вы можете поступить иначе, создав объект с ключами enum:

enum SomethingKeys {
   red = "red",
   blue= "blue",
   green= "green",
}
type ISomething= Record<SomethingKeys, string>
const a: ISomething = {
    [SomethingKeys.blue]: 'blue',
    [SomethingKeys.red]: 'red',
    [SomethingKeys.green]: 'green',
}

Но я думаю, что вам действительно нужен не enum, а объединенный тип ключей, который вы определяете с помощью keyof , Подумайте:

interface ISomething {
  red: string;
  blue: string;
  green: string;
}
type Keys = keyof ISomething; // "red" | "blue" | "green"

И когда вы объявляете себя новичком ie, со строковыми литеральными символами все в порядке. Вам не нужны перечисления.

Если у вас есть Keys, вы можете использовать их также для создания других типов

// new object with keys of the original one
type OtherTypeWithTheSameKeys = Record<Keys, number> // type with keys of type Keys
const a: OtherTypeWithTheSameKeys = {
  blue: 1,
  green: 2,
  red: 3
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...