TypeScript typed array usage TypeScript typed array usage typescript typescript

TypeScript typed array usage


You have an error in your syntax here:

this._possessions = new Thing[100]();

This doesn't create an "array of things". To create an array of things, you can simply use the array literal expression:

this._possessions = [];

Of the array constructor if you want to set the length:

this._possessions = new Array(100);

I have created a brief working example you can try in the playground.

module Entities {      class Thing {    }            export class Person {        private _name: string;        private _possessions: Thing[];        private _mostPrecious: Thing;        constructor (name: string) {            this._name = name;            this._possessions = [];            this._possessions.push(new Thing())            this._possessions[100] = new Thing();        }    }}


There are two syntax options available when declaring an array in typescript. The typescript docs uses Array<T> however ts-lint prefers T[]

By using the Array<Thing> it is making use of the generics in typescript. It is similar to asking for a List<T> in c# code.

// Declare with default valueprivate _possessions: Array<Thing> = new Array<Thing>(); // orprivate _possessions: Array<Thing> = []; // orprivate _possessions: Thing[] = []; // or -> prefered by ts-lint

or

// declare then assign in the constructorprivate _possessions: Array<Thing>; // orprivate _possessions: Thing[]; // or -> preferd by ts-lint  constructor(){    this._possessions = new Array<Thing>(); // or    this._possessions = []; // or}


The translation is correct, the typing of the expression isn't. TypeScript is incorrectly typing the expression new Thing[100] as an array. It should be an error to index Thing, a constructor function, using the index operator. In C# this would allocate an array of 100 elements. In JavaScript this calls the value at index 100 of Thing as if was a constructor. Since that values is undefined it raises the error you mentioned. In JavaScript and TypeScript you want new Array(100) instead.

You should report this as a bug on CodePlex.