打字稿中的数组
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的“参数属性”部分以上是关于打字稿中的数组的主要内容,如果未能解决你的问题,请参考以下文章