Как создать, инициализировать и заполнить массив в TypeScript?
У меня есть следующие классы в TypeScript:
class bar {
length: number;
}
class foo {
bars: bar[] = new Array();
}
И тогда у меня есть:
var ham = new foo();
ham.bars = [
new bar() { // <-- compiler says Expected "]" and Expected ";"
length = 1
}
];
Есть ли способ сделать это в TypeScript?
UPDATE
Я придумал другое решение, получив метод set для возврата:
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;
}
}
чтобы вы могли инициализировать его, как показано ниже:
var ham = new foo();
ham.setBars(
[
new bar(1).height(2),
new bar(3)
]);
Ответы
Ответ 1
Синтаксис инициализации поля не существует для объектов в JavaScript или TypeScript.
Вариант 1:
class bar {
// Makes a public field called 'length'
constructor(public length: number) { }
}
bars = [ new bar(1) ];
Вариант 2:
interface bar {
length: number;
}
bars = [ {length: 1} ];
Ответ 2
Если вы действительно хотите иметь именованные параметры плюс ваши объекты являются экземплярами вашего класса, вы можете сделать следующее:
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})
];
Также здесь связанный элемент в typescript отслеживании проблем.
Ответ 3
Простое решение может быть:
interface bar {
length: number;
}
let bars: bar[];
bars = [];
Ответ 4
Другое решение:
interface bar {
length: number;
}
bars = [{
length: 1
} as bar];
Ответ 5
Если вы хотите "добавить" дополнительные элементы на страницу, вы можете создать массив карт. Вот как я создал массив карт, а затем добавил к нему результаты:
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);
}
});
Где product.ts похожи...
export class Product {
id: number;
[...]
}