/ / interfejs maszynowy: określ pełne specyficzne wyliczenie jako parametr - maszynopis, wyliczenia

interfejs maszynowo-maszynowy: określ pełne wyliczenie jako parametr - maszynopis, wyliczenia

Chcę udostępnić interfejs, który zagwarantuje, że definicja enum zostanie przekazana.

// 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?
}

Chcę, aby konsumenci mieli dostęp do tego wyliczenia, jakby był wstrzyknięty. Na przykład:

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

Jeśli to nie jest możliwe, jak mógłbym osiągnąć ten sam efekt? Ostatecznie chcę po prostu przejść wokół stałej, silnie wpisanej mapy K: V (string: string).

Widziałem podobne: Enum jako parametr w maszynopisie, chociaż moje intencje są wystarczająco różne.

Odpowiedzi:

1 dla odpowiedzi № 1

Cóż, możesz to zrobić dokładnie tak:

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!

Chociaż oczywiście nie jestem pewien co do celutego. Jeśli przekazujesz konkretne wyliczenie, nie musisz go dokładnie przekazywać, ponieważ możesz odwołać się do niego po nazwie. Co nie możesz zrobić, to stworzyć funkcję, która akceptuje każdy enum i tylko enums, jak wskazuje na to pytanie.