Массивы типа script
Мне сложно объявить массив в typescript и получить доступ к нему.
ниже - код, который работает для меня
class Book {
public BookId: number;
public Title: string;
public Author: string;
public Price: number;
public Description: string;
}
class dataservice {
getproducts() {
var bk = new Book();
bk.Author = "vamsee";
bk.BookId = 1;
var bks: Book[] = [bk,bk];
return bks.length;
}
}
var ds = new dataservice();
var button = document.createElement('button');
button.onclick = function () {
alert(ds.getproducts().toString());
}
document.body.appendChild(button);
Когда я меняю свой код, как показано ниже, он терпит неудачу при попытке присвоить значение элементу массива.
var bks: Book[] = new Book[2];
bks[0].Author = "vamsee";
bks[0].BookId = 1;
return bks.length;
Чтобы добавить объект в цикл, я должен сделать это вторым способом.
Ответы
Ответ 1
Это код типа С#:
var bks: Book[] = new Book[2];
В Javascript/ Typescript вы не выделяете память спереди так, а это означает что-то совершенно другое. Вот как вы будете делать то, что хотите:
var bks: Book[] = [];
bks.push(new Book());
bks[0].Author = "vamsee";
bks[0].BookId = 1;
return bks.length;
Теперь, чтобы объяснить, что означает new Book[2];
. Это на самом деле означает, что вызов нового оператора на значение книги [2]. например:
Book[2] = function (){alert("hey");}
var foo = new Book[2]
и вы должны увидеть эй. Попробуйте
Ответ 2
Вы также можете сделать это (сокращение), вместо того, чтобы делать объявление экземпляра. Вы делаете это в JSON вместо этого.
class Book {
public BookId: number;
public Title: string;
public Author: string;
public Price: number;
public Description: string;
}
var bks: Book[] = [];
bks.push({BookId: 1, Title:"foo", Author:"foo", Price: 5, Description: "foo"}); //This is all done in JSON.
Ответ 3
Более чистый способ сделать это:
class Book {
public Title: string;
public Price: number;
public Description: string;
constructor(public BookId: number, public Author: string){}
}
Тогда
var bks: Book[] = [
new Book(1, "vamsee")
];