J'ai un extrait de code comme celui-ci:
export class TagCloud {
tags: [Tag];
locations: [Location];
constructor() {
this.tags = new Array<Tag>();
this.locations = new Array<Location>();
}
}
Mais cela me donne les erreurs suivantes:
erreur TS2322: Le type 'Tag []' n'est pas assignable au type '[Tag]' . La propriété '0' est manquante dans le type 'Tag []'.
erreur TS2322: le type 'Emplacement []' n'est pas assignable au type '[Lo cation]'. La propriété '0' est manquante dans le type 'Emplacement []'.
Qu'est-ce que je fais mal (le code fonctionne bien)?
J'utilise des typages avec les descriptions de type es6-shim ( https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/es6-shim ).
Dans TypeScript, lorsque vous déclarez un tableau, vous devez soit:
let a: Array<number>;
ou
let a: number[];
Quand vous utilisez:
let a: [number];
vous déclarez en fait un tuple , dans ce cas de longueur un avec un nombre.
Ceci est un autre tuple:
let a: [number, string, string];
La raison pour laquelle vous obtenez cette erreur est que la longueur du tableau que vous affectez à tags
et locations
est égale à 0 et doit être égale à 1
Vous voulez utiliser Tag[]
pour indiquer à TypeScript que vous déclarez un tableau de Tag
.
export class TagCloud {
tags: Tag[];
locations: Location[];
constructor() {
// TS already knows the type
this.tags = []
this.locations =[]
}
}