打字稿中的数组

Posted

技术标签:

【中文标题】打字稿中的数组【英文标题】:Arrays in type script 【发布时间】:2013-04-20 10:34:24 【问题描述】:

我发现在 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]; 的含义。这实际上意味着在 Book[2] 的值上调用 new 运算符。例如:

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

你应该看到,嘿。 Try it

【讨论】:

更新:'new Book[2]' 将在 TS 0.9 中给出错误:No longer accept "new number[]":typescript.codeplex.com/…,因此编译器会告诉您它是错误的 :)【参考方案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")
];

【讨论】:

但是你没有在构造函数中初始化数据,它会自动初始化吗? 是的,确实如此。参见typescriptlang.org/docs/handbook/classes.html的“参数属性”部分

以上是关于打字稿中的数组的主要内容,如果未能解决你的问题,请参考以下文章

更新可观察打字稿中的数组值

无法从打字稿中的 json 对象获取数组响应

我如何遍历表单数组并将其值设置为打字稿中的另一个数组?

如何从打字稿中的数组中获取键[重复]

循环将新记录添加到打字稿中的数组[关闭]

如何将这些对象转换为打字稿中的数组