מחלקה - מערכים ב-TypeScript


אני נתקל בקושי בהכרזת מערך ב-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

זה סוג קוד מאוד של C#:

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];. זה בעצם אומר לקרוא למפעיל new על הערך של Book[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.