Подтвердить что ты не робот

Массивы типа 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;

Чтобы добавить объект в цикл, я должен сделать это вторым способом.

4b9b3361

Ответ 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")
];