web-dev-qa-db-fra.com

Erreur TS2322: Le type 'Object []' n'est pas assignable au type '[Object]'

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 ).

5
Tobias Stangl

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 

10
Nitzan Tomer

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 =[]
    }
}
0
Jeff