2 votes

Erreur TypeScript lors de l'accès à la propriété d'un objet littéral

Je suis un débutant en TypeScript. J'ai eu un petit problème lors de l'accès aux données d'un objet de type Object .

let content:Array<string> = ["I", "am", "a", "beginner"]
let data:Object = {a: "foo", b: content}
console.log(data.a);
console.log(data['b']);
console.log(data.b);

Ce code aura une erreur à la ligne 5. (pas d'erreur dans le JavaScript) S'il vous plaît, expliquez-moi. Merci pour toute aide.

2voto

DAXaholic Points 1446

Il suffit de supprimer la déclaration explicite de data d'être de Object afin que TypeScript puisse déduire le type, c'est-à-dire le changer en quelque chose comme ceci

let content:Array<string> = ["I", "am", "a", "beginner"]
let data = {a: "foo", b: content}
console.log(data.a);
console.log(data['b']);
console.log(data.b);

La raison de votre erreur dans votre code initial est que vous dites au compilateur TypeScript que data est de type Object ou toute classe dérivée de celle-ci - comme le type Object n'a pas de propriétés a o b cela entraîne une erreur.

Veuillez noter que la suppression de l'annotation de type explicite n'est pas la même chose que l'utilisation de la fonction any comme suggéré par AD.Net car dans ce cas, TypeScript dispose toujours de toutes les informations sur les types, mais elles sont simplement déduites (voir la capture d'écran de Visual Studio Code), alors qu'en utilisant la fonction any vous indiquez au compilateur TypeScript que la variable peut faire référence à n'importe quoi, ce qui n'entraîne aucune vérification de type.

enter image description here

0voto

AD.Net Points 8444

Vous pouvez attribuer data:any au moins, vous n'obtiendrez pas d'erreur. Si vous voulez intellisense, vous devrez créer un objet type/interface para data par exemple

interface myData{
    a:string;
    b:Array<String>
}
data:myData

alors vous pouvez avoir intellisense.

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