web-dev-qa-db-fra.com

Comment instancier, initialiser et renseigner un tableau dans TypeScript?

J'ai les classes suivantes dans TypeScript:

class bar {
    length: number;
}

class foo {
    bars: bar[] = new Array();
}

Et puis j'ai:

var ham = new foo();
ham.bars = [
    new bar() {          // <-- compiler says Expected "]" and Expected ";"
        length = 1
    }
];

Y at-il un moyen de faire cela dans TypeScript?

MISE À JOUR

Je suis venu avec une autre solution en ayant une méthode set pour se retourner:

class bar {
    length: number;

    private ht: number;
    height(h: number): bar {
        this.ht = h; return this;
    }

    constructor(len: number) {
        this.length = len;
    }
}

class foo {
    bars: bar[] = new Array();
    setBars(items: bar[]) {
        this.bars = items;
        return this;
    }
}

afin que vous puissiez l'initialiser comme ci-dessous:

var ham = new foo();
ham.setBars(
    [
        new bar(1).height(2),
        new bar(3)
    ]);
56
Ray Cheng

Il n’existe pas de syntaxe d’initialisation de champ semblable à celle utilisée pour les objets en JavaScript ou en TypeScript.

Option 1:

class bar {
    // Makes a public field called 'length'
    constructor(public length: number) { }
}

bars = [ new bar(1) ];

Option 2:

interface bar {
    length: number;
}

bars = [ {length: 1} ];
57
Ryan Cavanaugh

Si vous voulez vraiment avoir des paramètres nommés et que vos objets soient des instances de votre classe, vous pouvez procéder comme suit:

class bar {
    constructor (options?: {length: number; height: number;}) {
        if (options) {
            this.length = options.length;
            this.height = options.height;
        }
    }
    length: number;
    height: number;
}

class foo {
    bars: bar[] = new Array();
}

var ham = new foo();
ham.bars = [
    new bar({length: 4, height: 2}),
    new bar({length: 1, height: 3})
];

De plus, ici est l'élément associé dans l'outil de suivi des problèmes TypeScript.

18
orad

Une solution simple pourrait être:

interface bar {
    length: number;
}

let bars: bar[];
bars = [];
5
Adel Bachene

Une autre solution:

interface bar {
    length: number;
}

bars = [{
  length: 1
} as bar];
0
ArDumez