在 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 中创建一个对每个键值对都是类型安全的键值字典吗?