在脚本类型数组(Arrays in type script)

2019-09-01 04:58发布

我发现难度声明中打字稿阵列和访问它。

以下为我工作的代码

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;

对我来说,在一个循环中添加对象我必须这样做,第二种方式。

Answer 1:

这是一个代码非常C#类型:

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

在Javascript /打字稿你不分配内存,前面那样,这意味着完全不同的东西。 这是你会怎么做你想做的事:

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]

你应该看到哎。 试试吧



Answer 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.


Answer 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")
];


文章来源: Arrays in type script