2016-07-06 33 views
8

Vorrei semplicemente aggiungere un oggetto di una classe (Pixel) a un array.TypeScript aggiungi Oggetto alla matrice con push

export class Pixel { 
    constructor(x: number, y: number) {} 
} 

La classe ha il seguente attributo:

pixels: Pixel[] = []; 

Il seguente codice sembra logico per me, ma non spinge gli oggetti reali ai miei pixel matrice.

this.pixels.push(new Pixel(x, y)); 

Solo questo funziona:

var p = {x:x, y:y}; 
this.pixels.push(p); 

Qualcuno mi potrebbe spiegare perché la dichiarazione di cui sopra non funziona?

+1

il codice è bene e sta lavorando bene quando ho provato. Deve essere qualcos'altro che causa il problema. Si prega di includere il codice reale che è problematico con il messaggio di errore –

risposta

23

Se il tuo esempio rappresenta il tuo codice reale, il problema non è nello push, è che il tuo costruttore non fa nulla.

È necessario dichiarare e inizializzare i membri x e .

esplicito:

export class Pixel { 
    public x: number; 
    public y: number; 
    constructor(x: number, y: number) { 
     this.x = x; 
     this.y = y; 
    } 
} 

o implicitamente:

export class Pixel { 
    constructor(public x: number, public y: number) {} 
} 
+0

Grazie mille. In effetti il ​​costruttore era sbagliato. IMO l'IDE potrebbe darmi un avvertimento su questo argomento, perché dubito che qualcuno voglia quel comportamento. :-) – Johannes

+0

Se si desidera utilizzare il filtro di versione ES6 come: this.pixels.filter (e => e.x === valore); dovrai utilizzare il modello 'esplicitamente' come mostrato. – phanf

+0

@phanf Non penso che sia corretto, il javascript generato [è identico] (https://www.typescriptlang.org/play/#src=export%20class%20ExplicitPixel%20%7B%0D%0A%20% 20% 20% 20Public% 20x% 3A% 20number% 3B% 0D% 0A% 20% 20% 20% 20Public% 20y% 3A% 20number% 3B% 20% 20% 20% 0D% 0A% 20% 20% 20% 20constructor (x% 3A% 20number% 2C% 20y% 3A% 20number)% 20% 7B% 0D% 0A% 20% 20% 20% 20% 20% 20% 20% 20% 20this.x% 3D% 20x% 3B % 0D% 0A% 20% 20% 20% 20% 20% 20% 20% 20% 20this.y% 3D% 20y% 3B% 0D% 0A% 20% 20% 20% 20% 7D% 0D% 0A% 7D % 0D% 0A% 0D% 0Aexport% 20class% 20ImplicitPixel% 20% 7B% 0D% 0A% 20% 20% 20% 20constructor (% pubblico 20x% 3A% 20number% 2C% 20Public% 20y% 3A% 20number)% 20% 7B% 7D% 0D% 0A% 7D) – Motti

Problemi correlati