Contraintes de type dans ts, le type union est converti en un type unique

Description du problème : Les paramètres obtenus à partir du backend ou transportés à partir d'autres pages doivent être obtenus sur une certaine page. La valeur obtenue peut être un type d'union, similaire à string|string[] ou number|undefined, et ts a une déclaration de type stricte, lorsque nous devons utiliser cette valeur, vscode signalera une erreur.

Solution : Alors, comment convertir cette chaîne de type combinée|string[] en une chaîne de type unique ? La solution consiste à utiliser l'assertion as type dans ts pour indiquer à l'analyseur le type réel de la variable.

 

Voici les problèmes réels que j'ai rencontrés :

analyser le problème :

L'identifiant ici est un paramètre obtenu à partir de la page de liste via le routage, et le type de valeur obtenu est une chaîne ou une chaîne[]

f23bacdffede4c168f6ecee65a833bd4.png

 

Étant donné que le paramètre id requis par le backend pour obtenir des détails est de type number, parseInt est utilisé pour la conversion. Par conséquent, le compilateur affichera que string[] ne peut pas être converti en chaîne (car le type de chaîne peut convertir une chaîne en nombre via la méthode parseInt) 1539d77f40dd41b4843715316cd3614a.png

 Solution : Il suffit d'utiliser une assertion de type pour résoudre le problème. Ici, nous convertissons le type de route.params.id en chaîne, puis enfin le transformons en type numérique via la méthode parseInt.

90c9b12a0e7a4666b76eb0b5a9f09f1a.png

 Remarque : Cette conversion ne s'applique qu'à la conversion de type générée par l'inférence par défaut du compilateur. Si elle est définie par vous-même, elle ne peut pas être convertie (bien sûr, les variables de code sont toutes des types auto-définis, et elles le seront certainement écrit en fonction de ce dont ils ont besoin. Non. Si une situation aussi ambiguë se présente, je ne chercherai pas cette question.)


C'est aussi assez émotionnel. J'ai appris les assertions de type quand j'étudiais ts auparavant, mais je ne les ai jamais utilisées et je les ai presque oubliées. Cette fois, alors que je travaillais sur un projet, j'ai soudainement rencontré ce problème et j'ai utilisé cette assertion de type, alors j'ai pensé à propos de l'enregistrer.


d'ailleurs:

Les assertions de type peuvent être utilisées pour indiquer à l'analyseur le type réel d'une variable

Syntaxe : variable en tant que
           variable de type <type> 

let e: unknown;
let s: string;

s = e as string;
s = <string>e

Pour d'autres connaissances détaillées liées à des ts spécifiques, vous pouvez vous référer à mon autre article : TypeScript Study notes_lilil_jing's blog-CSDN blog

 

 

 

Je suppose que tu aimes

Origine blog.csdn.net/m0_53703061/article/details/129454976
conseillé
Classement