Создать интерфейс, используя ключи перечисления в Typescript - PullRequest
1 голос
/ 02 июня 2019

Я хочу использовать свой enum для создания интерфейса.

Просто потому, что один должен измениться, а другой тоже должен быть изменен. Я хочу изменить код более внимательно.

Ключ enum является тем же ключом интерфейса.

export enum SmsReplaceKeyEnum {
  STAY_DATE = "%STAYDATE%",
  STAY_DATE_YMD = "$STAYDATEYMD%",
  ROOMTYPE_N_COUNT = "%ROOMTYPENCOUNT%",
  BOOKERNAME = "%BOOKER%",
  TOTAL_PRICE = "%TOTALPRICE%"
}

interface IPareser {
  STAY_DATE: string;
  STAY_DATE_YMD: string;
  ROOMTYPE_N_COUNT: string;
  BOOKERNAME: string;
  TOTAL_PRICE: string;
}

У меня тоже есть этот

export const SmsReplaceKeyEnumKeys = [
  "STAY_DATE",
  "STAY_DATE_YMD",
  "ROOMTYPE_N_COUNT",
  "BOOKERNAME",
  "TOTAL_PRICE"
];

Я пытался

interface IPareser {
  [key in SmsReplaceKeyEnumKeys]: string;
}

interface IPareser {
  [key keyof SmsReplaceKeyEnumKeys]: string;
}

Конечная цель - создать тип объекта со всеми ключами в списке.

1 Ответ

2 голосов
/ 02 июня 2019

Вы не можете использовать синтаксис сопоставленных типов внутри описания интерфейса в TS (сейчас, до версии 3.5). Вы можете сделать желаемый тип прямо из вашего перечисления следующим образом:

type Parser = {
  [K in keyof typeof SmsReplaceKeyEnum]: string;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...