TypeScript typed array usage

后端 未结 3 597
有刺的猬
有刺的猬 2020-12-13 16:34

I have a TypeScript class definition that starts like this;

module Entities {          

    export class Person {
        private _name: string;
        pri         


        
相关标签:
3条回答
  • 2020-12-13 17:11

    You could try either of these. They are not giving me errors.

    It is also the suggested method from typescript for array declaration.

    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 value
    private _possessions: Array<Thing> = new Array<Thing>();
    // or
    private _possessions: Array<Thing> = [];
    // or -> prefered by ts-lint
    private _possessions: Thing[] = [];
    

    or

    // declare
    private _possessions: Array<Thing>;
    // or -> preferd by ts-lint
    private _possessions: Thing[];
    
    constructor(){
        //assign
        this._possessions = new Array<Thing>();
        //or
        this._possessions = [];
    }
    
    0 讨论(0)
  • 2020-12-13 17:24

    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();
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-13 17:26

    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.

    0 讨论(0)
提交回复
热议问题