Ich habe die folgenden Klassen in TypeScript:
class bar {
length: number;
}
class foo {
bars: bar[] = new Array();
}
Und dann habe ich:
var ham = new foo();
ham.bars = [
new bar() { // <-- compiler says Expected "]" and Expected ";"
length = 1
}
];
Gibt es eine Möglichkeit, dies in TypeScript zu tun?
AKTUALISIEREN
Ich habe eine andere Lösung gefunden, indem ich eine festgelegte Methode hatte, um sich selbst zurückzugeben:
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;
}
}
Sie können es also wie folgt initialisieren:
var ham = new foo();
ham.setBars(
[
new bar(1).height(2),
new bar(3)
]);
javascript
typescript
Ray Cheng
quelle
quelle
[ {length: 1} ]
ist keine Instanz von bar, aber wenn unterstützt,new bar() { length = 1 }
wäre es eine Instanz von bar. Vielleicht sollten wir dafür einen Funktionsvorschlag machen?Antworten:
Für Objekte in JavaScript oder TypeScript gibt es keine solche Feldinitialisierungssyntax.
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} ];
quelle
bars:bar[]=[{length:1}]
Wenn Sie wirklich benannte Parameter haben möchten und Ihre Objekte Instanzen Ihrer Klasse sein sollen, können Sie Folgendes tun:
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 hier ist der verwandte Artikel zum Typoskript-Issue-Tracker.
quelle
options? : {length?: number; height?: number;}
Eine einfache Lösung könnte sein:
interface bar { length: number; } let bars: bar[]; bars = [];
quelle
Eine andere Lösung:
interface bar { length: number; } bars = [{ length: 1 } as bar];
quelle
Wenn Sie einer Seite zusätzliche Elemente hinzufügen möchten, möchten Sie möglicherweise ein Array von Karten erstellen. So habe ich ein Array von Karten erstellt und dann Ergebnisse hinzugefügt:
import { Product } from '../models/product'; products: Array<Product>; // Initialize the array. [...] let i = 0; this.service.products( i , (result) => { if ( i == 0 ) { // Create the first element of the array. this.products = Array(result); } else { // Add to the array of maps. this.products.push(result); } });
Wo product.ts aussehen ...
export class Product { id: number; [...] }
quelle