459 votes

Le type de type 'chaîne' n'est pas assignable à un type

Voici ce que j'ai dans fruit.ts

 export type Fruit = "Orange" | "Apple" | "Banana"
 

Maintenant, j'importe Fruit.ts dans un autre fichier dactylographié. Voici ce que j'ai

 myString:string = "Banana";

myFruit:Fruit = myString;
 

Quand je fais

 myFruit = myString;
 

Je reçois une erreur:

Le type 'chaîne' n'est pas assignable au type '"Orange" | "Apple" | "Banane"'

Comment attribuer une chaîne à une variable de type personnalisé Fruit?

610voto

Nitzan Tomer Points 11798

Vous aurez besoin de le lancer :

 export type Fruit = "Orange" | "Apple" | "Banana";
let myString: string = "Banana";

let myFruit: Fruit = myString as Fruit;
 

Notez également que lorsque vous utilisez des littéraux de chaîne, vous ne devez utiliser qu'un |

41voto

André Pena Points 6989

Lorsque vous faites cela:

export type Fruit = "Orange" | "Apple" | "Banana"

...vous êtes la création d'un type appelé' Fruit qui ne peut contenir que les littéraux "Orange", "Apple" et "Banana". Ce type s'étend String, par conséquent, il peut être assigné à l' String. Toutefois, String ne PAS étendre "Orange" | "Apple" | "Banana", de sorte qu'il ne peut pas lui être attribué. String est moins spécifique. Il peut être n'importe quelle chaîne.

Lorsque vous faites cela:

export type Fruit = "Orange" | "Apple" | "Banana"

const myString = "Banana";

const myFruit: Fruit = myString;

...il fonctionne. Pourquoi? Car le type d' myString dans cet exemple est - "Banana". Oui, "Banana" est le type. Il s'étend String il est donc cessible String. En outre, un type s'étend un Type d'Union quand il s'étend tout de ses composants. Dans ce cas, "Banana", le type, s'étend "Orange" | "Apple" | "Banana" car il s'étend de l'un de ses composants. Par conséquent, "Banana" est cessible "Orange" | "Apple" | "Banana" ou Fruit.

15voto

Steve Adams Points 1638

Je vois c'est un peu vieux, mais il pourrait y avoir une meilleure solution ici.

Quand vous voulez une chaîne de caractères, mais vous souhaitez que la chaîne de seulement certaines valeurs, vous pouvez utiliser les énumérations.

Par exemple:

enum Fruit {
    Orange = "Orange",
    Apple  = "Apple",
    Banana = "Banana"
}

let myFruit: Fruit = Fruit.Banana;

Maintenant, vous savez que peu importe ce que, myFruit sera toujours la chaîne "Banane" (Ou tout autre énumérable valeur que vous choisissez). Ceci est utile pour beaucoup de choses, que ce soit le regroupement des valeurs similaires comme cela, ou la cartographie convivial valeurs de machine-amicale des valeurs, tout en appliquant et en limitant les valeurs le compilateur va permettre.

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