3 votes

Comment obtenir la valeur d'une chaîne de caractères à partir d'un enum en typescript ?

J'ai une énumération de valeurs de chaînes de caractères. Je veux passer une valeur de chaîne à l'énumération et en récupérer la valeur.

export enum OperationType  {
    CREATE = "CREATE",
    UPDATE = "UPDATE"
}

J'ai aussi de la classe

class Item {
type:string;
id:string
date:string
}

J'appelle maintenant la fonction suivante

function sendData(type:OperationType) {
//Do some work
}

Maintenant, je veux passer la valeur dans l'enum comme ceci, mais je n'y arrive pas

//Here item.type = "CREATE"

sendData(OperationType[item.type])

Mais cela est maintenant autorisé et j'obtiens une erreur de compilation due à un mauvais type. Comment puis-je faire ?

EDIT : L'erreur est

L'élément a implicitement un type "any" car l'expression de type "string" ne peut pas être utilisée pour indexer le type "typeof OperationType".

0voto

shumih Points 295

Dans votre cas, j'utiliserais les syndicats :

type OperationType = "CREATE" | "UPDATE";

class Item {
  type: OperationType;
  id: string;
  date: string;
}

function sendData(type: OperationType) {
  //Do some work
}

Cette approche permet de bénéficier de la même intelligence de l'IDE et de la même vérification de type. Sinon, vous pouvez simplement changer type: OperationType; .

Vous pouvez également utiliser const enums . const rend l'énumération en lecture seule et indique au compilateur de ne pas générer de correspondance inverse ;

export const enum OperationType  {
    CREATE = "CREATE",
    UPDATE = "UPDATE"
}

0voto

Alex Serban Points 1

Ce qui ne va pas ici, c'est le type du paramètre à l'intérieur de la définition de la fn sendData. Il devrait s'agir d'une chaîne de caractères. Vous dites à ts qu'il s'agit d'un type Enum, et non d'une chaîne de caractères.

La définition de la fonction devrait donc ressembler à ceci :

function sendData(type: String) {
//Do some work
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X