类型为Object的类成员,http服务' as'语法

时间:2016-11-25 12:45:33

标签: angular typescript

我有一个返回的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类的名称成员的类型?

2 个答案:

答案 0 :(得分:1)

似乎很好。 但是你的变量private Name: string不应该来自类型字符串! 它是一个对象..因此将其声明为anyName的类型并定义该类。

请记住使用演员或as仅适用于属性,但不会有该类提供的任何函数。

答案 1 :(得分:1)

typescript编译器根本不检查你的angular 2模板,因此表达式{{user.name.first}}只是等待在运行时执行。如果您将此代码直接放入Component类代码中,您肯定会收到通知。

在已编译的执行javascript中未执行类型检查,您不会收到任何错误。就像使用typescript接口一样,它在编译过程中就会消失。

您可以做的最好的事情是为名称(例如MyName)创建包含属性title, first, last的类型,并将其设置为而不是字符串private Name: MyName;