【问题标题】: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;

如果我要在循环中添加对象,我必须采用第二种方式。

【问题讨论】:

    标签: arrays class object typescript


    【解决方案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")
      ];
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      相关资源
      最近更新 更多