在 Typescript 中创建对象并添加值无法设置未定义的属性“X”

Posted

技术标签:

【中文标题】在 Typescript 中创建对象并添加值无法设置未定义的属性“X”【英文标题】:Create Object and add Values in Typescript Cannot set property 'X' of undefined 【发布时间】:2018-07-22 23:39:15 【问题描述】:

您好,我在理解 Typescript 以及如何创建具有属性的对象方面遇到了一个小问题。

我不明白如何创建对象并在创建后在其中添加一些值。

我阅读了许多关于可能解决方案的博客,但没有任何效果。我得到的只是“无法设置未定义的属性'bookTitle'”。

我已经尝试过这个解决方案。 TypeScript and field initializers

How can I create an object based on an interface file definition in TypeScript?

In Typescript how to fix Cannot set property 'first' of undefined

至少我知道我还没有完全理解 Typescript 是如何工作的以及我应该如何修复它。学习这种语言有点令人沮丧。我只有 Java 方面的经验...

我的示例代码

//one ts file
 export interface Book 
   bookTitle: string;
   currentStatus: string;
   daysLeft: number;
   preregistrationStatus: string;
   returnDate: string;
   signature: string;
 

 export class Lib 
   books: Array<Book>;

 ionViewDidLoad(): void 
  this.getBorrowedBooks();
 

 getBorrowedBooks(): void 
  this.api.get('library/borrowedbooks')
  .map(res => res.json())
  .subscribe(
    data => 
      for ( let _i: number = 0; _i < data.length; _i++) 
        this.metaInfo.set( data[_i].bookTitle, data[_i].daysLeft);
       var book: Book = 
        bookTitle: data[_i].bookTitle,
        currentStatus: data[_i].bookTitle,
        daysLeft: data[_i].bookTitle,
        preregistrationStatus: data[_i].bookTitle,
        returnDate: data[_i].bookTitle,
        signature: data[_i].bookTitle,
      ;
     this.books.push(book);
  
 

//编辑

响应正文

[
  
    "bookTitle": "Mobile computing / Fuchß, Thomas , 2009 ",
    "returnDate": "2018-03-04",
    "currentStatus": "2. Verlängerung ",
    "signature": "2009 A 3032;h",
    "daysLeft": 21,
    "preregistrationStatus": ""
  
 ]

【问题讨论】:

有一个错字 --> export inteface 这与来自library/borrowedbooks 的响应有关。你有响应的例子吗? 抱歉错字 -> 错字已修复,我添加了我的响应正文 您的代码看起来应该可以工作。您是否能够在for 循环的每次迭代开始时记录data[_i] 的值并验证data[_i] 是您期望的值?错误消息似乎表明data[_i] 可能是其中一个循环中的undefined 【参考方案1】:

只需初始化属性。变化:

books: Array<Book>;

到:

books: Array<Book> = [];

我只有 Java 方面的经验...

回顾并记住,您必须阅读该语言才能学习它。 TypeScript 也不例外,一本好书会极大地帮助你。

【讨论】:

以上是关于在 Typescript 中创建对象并添加值无法设置未定义的属性“X”的主要内容,如果未能解决你的问题,请参考以下文章

为啥 ngfor 指令不起作用,尽管我在 Typescript 类中创建了正确的对象

我可以在 TypeScript 中创建一个对每个键值对都是类型安全的键值字典吗?

使用 Typescript 在 Sequelize 模型中创建实例方法

如何在 TypeScript 中创建本地模块

无法在玩家类中创建对象

PHP警告。从空值中创建默认对象