我有一个返回的API:
{
"results": [{
"name": {
"title": "mr",
"first": "konsta",
"last": "tuomala"
},
"email": "kt@test.com"
...
我试图将一个打字稿类映射到这个模型,如下所示:
private name: string;
private email: string;
constructor(name: string, email: string) {
this.name = name;
this.email = email;
}
我可以将电子邮件映射为字符串,但名称是什么?
现在在我的服务中我这样做;
return this.http.get('API').toPromise().then(
response => response.json().results as User[]
)
它自动将名称对象映射到用户成员,我可以在模板中访问它:
{{user.name.first}}
为什么尝试将对象映射到字符串时没有错误?
处理此类数据的正确方法是什么?我是否必须创建一个Name类并将其用作User类的名称成员的类型?
答案 0 :(得分:1)
似乎很好。
但是你的变量private Name: string
不应该来自类型字符串!
它是一个对象..因此将其声明为any
或Name
的类型并定义该类。
请记住使用演员或as
仅适用于属性,但不会有该类提供的任何函数。
答案 1 :(得分:1)
typescript编译器根本不检查你的angular 2模板,因此表达式{{user.name.first}}
只是等待在运行时执行。如果您将此代码直接放入Component
类代码中,您肯定会收到通知。
在已编译的执行javascript中未执行类型检查,您不会收到任何错误。就像使用typescript接口一样,它在编译过程中就会消失。
您可以做的最好的事情是为名称(例如MyName
)创建包含属性title, first, last
的类型,并将其设置为而不是字符串private Name: MyName;