2013-02-04 10 views
27

Ich habe die folgenden Klassen in Typoskript:Wie instanziieren, initialisieren und füllen Sie ein Array in TypeScript?

class bar { 
    length: number; 
} 

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

Und ich habe dann:

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

Gibt es eine Möglichkeit in Typoskript, das zu tun?

UPDATE

kam ich mit einer anderen Lösung, indem eine Reihe Verfahren mit sich selbst zurück:

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; 
    } 
} 

so können Sie es initialisieren, wie unten:

var ham = new foo(); 
ham.setBars(
    [ 
     new bar(1).height(2), 
     new bar(3) 
    ]); 
+0

Es wäre wirklich nützlich, Objekt-Initialisierer in TypeScript ähnlich wie C# zu haben. '{{length: 1}]' ist keine Instanz von bar, aber falls unterstützt, wäre 'new bar() {length = 1}' eine Instanz von bar. Vielleicht sollten wir einen Feature-Vorschlag dafür machen? – orad

Antwort

30

Es isn Eine Feldinitialisierungssyntax wie für Objekte in JavaScript oder 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} ]; 
+3

, um Dinge klarer und typsicher zu machen: 'bars: bar [] = [{länge: 1}]' – Patrice

+0

Gibt es eine Möglichkeit, dies zu tun, ohne Klassen zu definieren? – blackiii

+0

Die Frage ist, wie man ein Array in einer Klasse initialisiert. Es gibt keine Möglichkeit, ein Array in einer Klasse zu initialisieren, ohne Klassen zu verwenden. –

14

Wenn Sie wirklich benannte Parameter haben wollen und haben Ihre Objekte Instanzen Ihrer Klasse sein, können Sie wie folgt vorgehen:

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}) 
]; 

Auch here ist das verwandte Element auf Typoskript Problem Tracker.

+0

+1 für Problem Link. Sie können auch initialisieren Werte optional: 'Optionen? : {Länge ?: Nummer; Höhe ?: Zahl;} ' –

Verwandte Themen