2017-09-21 1 views
0

J'essaie de mapper un ENUM à une chaîne:Enum à chaîne de recherche objet -> n'a pas d'indice Signature

enum Status { 
    NEW = "NEW", 
    INPROCESSING = "IN PROCESSING", 
    DONE = "DONE" 
}; 

const statusToColor: { [key in Status ]: string } = { 
    "NEW": "blue", 
    "IN PROCESSING": "yellow", 
    "DONE": "green" 
} 

Jusqu'à ce point tout va bien. Mais lorsque je tente:

EDIT: Semble que j'ai simplifié le problème à beaucoup, comme le problème réel semble être encore ailleurs:

L'a pas d'erreur d'index ne se produit que, lorsque je tente de nourrir "statusToColor" d'un tableau, comme ceci:

const statusArrayToColors = (statusArray: Status[]): string[] => { 
    return statusArray.map(status => statusToColor[status]) 
} 

Dans ce cas

statusToColor[status] 

n'a pas de signature d'index selon le compilateur.

+0

Avez-vous vu ma réponse? Le code que vous avez édité en corrigeant la faute de frappe fonctionne pour moi. – lilezek

Répondre

2

Votre code a une faute de frappe. Cela fonctionne pour moi Version 2.5.0-dev.20170629:

enum Status { 
    NEW = "NEW", 
    INPROCESSING = "IN PROCESSING", 
    DONE = "DONE" 
}; 

const statusToColor: { [key in Status ]: string } = { 
    "NEW": "blue", 
    "IN PROCESSING": "yellow", 
    "DONE": "green" 
} 

const color: string = statusToColor[Status.NEW]; 

Vérifiez la ligne de statusToColor. Pour définir le type, vous devez utiliser les deux-points :, mais pas =.

Note: you need at least typescript version 2.4.

+0

Sa nouvelle version des littéraux de chaîne de la version 2.4 peut être utilisée dans Enums – rjustin

+0

Merci pour la réponse rapide! J'ai simplifié le problème beaucoup, l'erreur réelle semble être ailleurs. Pourriez-vous regarder la question mise à jour? –