Gostaria de repetir um TypeScript enum
e obter um nome de símbolo enumerado, por exemplo:
enum myEnum { entry1, entry2 }
for (var entry in myEnum) {
// use entry's name here, e.g., "entry1"
}
enums
typescript
CalvinDale
fonte
fonte
getAllEnumValues
egetAllEnumKeys
para o seu propósitoRespostas:
O código que você postou funcionará; ele imprimirá todos os membros da enum, incluindo os valores dos membros da enum. Por exemplo, o seguinte código:
Irá imprimir o seguinte:
Se você preferir apenas os nomes dos membros, e não os valores, poderá fazer algo assim:
Isso imprimirá apenas os nomes:
Advertência: isso depende um pouco de detalhes da implementação: o TypeScript compila enumerações em um objeto JS com os valores de enumeração sendo membros do objeto. Se a TS decidir implementá-los de maneira diferente no futuro, a técnica acima poderá ser interrompida.
fonte
+enumMember >= 0
deveria serisFinite(+enumMember)
porque os valores negativos ou de ponto flutuante também são mapeados inversamente. ( Playground )Embora a resposta já seja fornecida, quase ninguém apontou os documentos
Aqui está um trecho
Lembre-se de que os membros da string enum não recebem um mapeamento reverso.
fonte
0
ou a1
partir desta enumeração?export enum Octave { ZERO = 0, ONE = 1 }
enum Enum {"A"}; let nameOfA = Enum[Enum.A];
:? A partir de [email protected] ele funciona muito bem para mim ...Supondo que você se atenha às regras e produza apenas enumerações com valores numéricos, você pode usar esse código. Isso lida corretamente com o caso em que você tem um nome que é coincidentemente um número válido
fonte
Para mim, uma maneira mais fácil, prática e direta de entender o que está acontecendo, é a seguinte enumeração:
Será convertido essencialmente para isso:
Por isso, o seguinte será verdadeiro:
Isso cria uma maneira fácil de obter o nome de um enumerado da seguinte maneira:
Ele também cria uma boa maneira de converter uma string em um valor enumerado.
As duas situações acima são muito mais comuns, porque geralmente você está muito mais interessado no nome de um valor específico e na serialização de valores de maneira genérica.
fonte
Se você pesquisar apenas os nomes e iterar posteriormente, use:
fonte
Object.values(myEnum).filter(value => typeof value === 'string') as string[];
Object.values(myEnum).filter(value => typeof value === 'string').map(key => { return {id: myEnum[key], type: key }; });
Com a versão 1.8.9 do TypeScript atual, uso Enums digitadas:
com resultados neste objeto Javascript:
então eu tenho que consultar através de chaves e valores e retornar apenas valores:
E eu recebo as chaves de opção em uma matriz:
fonte
A partir do TypeScript 2.4, as enumerações podem conter inicializadores de string https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html
Isso permite que você escreva:
e obtenha esta saída:
fonte
Esta solução também funciona.
fonte
Outra solução interessante encontrada aqui é usar o ES6 Map:
USAR
fonte
Deixe
ts-enum-util
( github , npm ) fazer o trabalho para você e forneça muitos utilitários seguros para tipos adicionais. Funciona com enumerações de seqüência de caracteres e numéricas, ignorando corretamente as entradas de pesquisa inversa de índice numérico para enumerações numéricas:String enum:
Enumeração numérica:
fonte
A partir do TypeScript 2.4, a enumeração não continha mais a chave como membro. fonte do leia-me TypeScript
Minha solução:
fonte
Você pode usar o
enum-values
pacote que escrevi quando tive o mesmo problema:Git: enum-values
fonte
Com base nas respostas acima, criei esta assinatura de função de segurança de tipo:
Uso:
o tipo de
stringVals
é'entry1' | 'entry2'
Veja em ação
fonte
(keyof T)[]
vez dekeyof T
. Além disso,export
impede que o seu playground funcione.Parece que nenhuma das respostas aqui funcionará com enumerações de caracteres em
strict
-mode.Considere enum como:
Acessando isso com
AnimalEnum["dog"]
pode resultar em um erro como:Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'typeof AnimalEnum'.ts(7053)
.Solução adequada para esse caso, escreva-o como:
fonte
keyof
withtypeof
! Outra solução parece bastante opaca, mas, afinal, acho que o Typescript precisa continuar melhorando no DX - Experiência do desenvolvedor para EnumA melhor maneira que eu acho é apenas declarar os valores de enumeração desejados. Dessa forma, acessá-los é limpo e bonito (sempre).
vai produzir:
fonte
De acordo com a documentação do TypeScript, podemos fazer isso via Enum com funções estáticas.
Obter nome de enumeração com funções estáticas
para ler mais sobre o Enum com função estática, siga o link abaixo https://basarat.gitbooks.io/typescript/docs/enums.html
fonte
A única solução que funciona para mim em todos os casos (mesmo que os valores sejam cadeias) é a seguinte:
fonte
Pergunta antiga, mas, por que não usar um
const
mapa de objetos?Em vez de fazer isso:
Faça isso (preste atenção ao
as const
elenco):fonte
console.log(Object.keys(Foo))
no primeiro exemplo apenas retornos["BAR", "EVERYTHING_IS_TERRIBLE"]
..["60", "80", "BAR", "EVERYTHING_IS_TERRIBLE"]
Encontrei essa pergunta pesquisando "TypeScript iterate over enum keys". Então, eu só quero postar uma solução que funcione para mim no meu caso. Talvez ajude alguém também.
Meu caso é o seguinte: quero iterar sobre cada chave enum, filtrar algumas chaves e acessar algum objeto que possua chaves como valores calculados a partir de enum. Então é assim que eu faço sem nenhum erro TS.
fonte
Eu escrevi uma classe EnumUtil que está fazendo uma verificação de tipo pelo valor enum:
Como usá-lo:
Resultado para as chaves NumberValueEnum: ["A", "B"]
Resultado para os valores NumberValueEnum: [0, 1]
Resultado para StringValueEnumkeys: ["A", "B"]
Resultado para StringValueEnumvalues: ["A", "B"]
fonte
Acho essa solução mais elegante:
Exibe:
fonte
Meu Enum é assim:
fazendo esse retorno indefinido :
Para resolver esse problema, escolho outra maneira de fazer isso usando um Pipe:
E para usá-lo:
fonte
Se você tem enum
Então você pode obter chave e valores como:
fonte
Argument of type '(d: Diet) => void' is not assignable to parameter of type '(value: string, index: number, array: string[]) => void'. Types of parameters 'd' and 'value' are incompatible. Type 'string' is not assignable to type 'MyEnum'.(2345)
Eu escrevi uma função auxiliar para enumerar uma enumeração:
Uso:
A função retorna algo que pode ser facilmente enumerado e também é convertido para o tipo de enumeração.
fonte
Usando uma versão atual do TypeScript, você pode usar funções como estas para mapear o Enum para um registro de sua escolha. Observe que você não pode definir valores de sequência com essas funções, pois elas procuram chaves com um valor que é um número.
fonte
Já existem muitas respostas aqui, mas acho que jogarei minha solução na pilha de qualquer maneira.
Parque infantil TypeScript
Para maior clareza:
Referência para registro TypeScript
Uma boa função auxiliar:
fonte
Para obter a lista dos valores de enum, você deve usar:
fonte
Não é exatamente a resposta da sua pergunta, mas é um truque para resolver o seu problema.
Você pode estender seu modelo de lista da maneira que desejar.
Agora, você pode usá-lo desta maneira:
ou:
fonte