我根据 Angular2 教程创建了一个非常简单的应用程序。
首先,我有一个非常简单的“书籍”模型:
/**
* book model
*/
export class Book {
public data;
/**
* constructor
* @param id
* @param title
* @param pages
*/
constructor(
public id,
public title:string,
public pages:Array
){
alert('it works'); // just a check
}
}
在我的服务中,我得到这样一本书:
return this._http.get('getBook/1')
.map(function(res){
return <Book> res.json();
})
我的期望是这将获得生成的 JSON 数据并将其“映射”到 Book 对象。
但是,它只返回一个类型为“Object”的对象。
我可以自己创建一个新的 Book 对象并在构造函数中传递参数,如下所示:
return new Book(res.id, res.title, res.pages);
这是最好的方法吗?我错过了什么吗?
最佳答案
是的,在 TypeScript 中将对象转换为类型不会创建该类型的实例。它只是 TypeScript 的一个类型检查工具。
如果你实际上想要一个 Book
的实例,你需要使用类似的东西:
return this._http.get('getBook/1')
.map(function(res){
var data = res.json();
return new Book(data.id, data.title, data.pages);
})
回答您的问题。事实上,如果您的类型中只有字段(例如带有接口(interface)),则转换就足够了。此外,如果您有稍后要使用的方法,则有必要隐式创建 Book
类型的实例(见上文)而不是强制转换。否则您将无法使用它们(它们将在您的对象上未定义)...
有关详细信息,请参阅此问题:
关于angular2 map 数据作为特定对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36911348/