интерфейс машинописного текста: укажите полное специфическое перечисление в качестве параметра - PullRequest
0 голосов
/ 07 мая 2018

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

// msg.ts, here's an example enum
export enum Messages {
  A,
  B
}

// interfaces.d.ts
export interface IThingy {
  Messages: Messages
  // ^ how do I specify that Messages should be the actual, full enum, not a member of the enum?
}

Я хочу, чтобы потребители могли получить доступ к этому перечислению, как если бы оно было введено. Например:

function (param: IThingy) {
   param.Messages.A // ok!
}

Если это невозможно, как я могу достичь того же эффекта? В конечном итоге я просто хочу передать константную, строго типизированную карту K: V (string: string).

Я видел подобное: Перечислите как параметр в машинописи , хотя мои намерения достаточно разные.

1 Ответ

0 голосов
/ 07 мая 2018

Ну, вы можете сделать это так:

export enum Messages {
  A,
  B
}

function fn(param: typeof Messages) {
  console.log(param.A); // ok!
}

fn(Messages);
fn(string); // no
// although, due to Structural typing:
fn({A: 0, B: 1}); // works!

Хотя, конечно, я не уверен насчет цели этого. Если вы передаете конкретное перечисление, вам не обязательно передавать его, так как вы можете ссылаться на него по имени. Что вы не можете сделать, так это создать функцию, которая принимает любое перечисление и только перечисления, как указывает вопрос, на который вы ссылаетесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...