39

タイプスクリプトで配列を宣言してアクセスするのが難しいと感じています。

以下は私のために働くコードです

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;

ループにオブジェクトを追加するには、2 番目の方法で行う必要があります。

4

3 に答える 3

68

これは非常に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];を意味するかを説明します。これは実際には、Book[2] の値に対して new 演算子を呼び出すことを意味します。例えば:

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

そして、あなたはねえを見るはずです。それを試してみてください

于 2013-04-26T09:56:45.117 に答える
-1

これを行うためのよりクリーンな方法:

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")
];
于 2016-02-22T00:09:05.887 に答える