typescriptecmascript-6typescript-typingsdefinitelytyped

Error TS2322: Type 'Object[]' is not assignable to type '[Object]'


I have a code snippet like this:

export class TagCloud {

    tags: [Tag];
    locations: [Location];

    constructor() {
        this.tags = new Array<Tag>();
        this.locations = new Array<Location>();
    }
}

But this gives me the following errors:

error TS2322: Type 'Tag[]' is not assignable to type '[Tag]'. Property '0' is missing in type 'Tag[]'.

error TS2322: Type 'Location[]' is not assignable to type '[Lo cation]'. Property '0' is missing in type 'Location[]'.

What am I doing wrong (the code is working though)?

I am using typings with the es6-shim Type descriptions (https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/es6-shim).


Solution

  • In typescript when you declare an array you either do:

    let a: Array<number>;
    

    or

    let a: number[];
    

    When you use:

    let a: [number];
    

    you are in fact declaring a tuple, in this case of length one with number.
    This is another tuple:

    let a: [number, string, string];
    

    The reason you get this error is because the length of the array you assign to tags and locations are 0, and it should be 1.