web-dev-qa-db-fra.com

Tableaux dans le script de type

J'ai de la difficulté à déclarer un tableau dans TypeScript et à y accéder.

ci-dessous le code fonctionne pour moi

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);

Lorsque je modifie mon code comme ci-dessous, il échoue lors de la tentative d'attribution d'une valeur à un élément de tableau.

var bks: Book[] = new Book[2];
bks[0].Author = "vamsee";
bks[0].BookId = 1;
return bks.length;

Pour que je puisse ajouter un objet dans une boucle, je dois le faire de la deuxième manière.

39
VKR

C'est un type de code très c #:

var bks: Book[] = new Book[2];

En Javascript/TypeScript, vous n'allouez pas de mémoire à l'avance de cette façon, ce qui signifie quelque chose de complètement différent. Voici comment vous feriez ce que vous voulez faire:

var bks: Book[] = [];
bks.Push(new Book());
bks[0].Author = "vamsee";
bks[0].BookId = 1;
return bks.length;

Maintenant, pour expliquer ce que new Book[2]; signifierait. Cela signifierait en fait que l'appel du nouvel opérateur sur la valeur de Book [2]. par exemple.:

Book[2] = function (){alert("hey");}
var foo = new Book[2]

et vous devriez voir hey. Essayez-le

67
basarat

Vous pouvez également le faire également (coupe plus courte) au lieu de devoir faire une déclaration d'instance. Vous faites cela en JSON à la place.

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.
15
fletchsod