Angular Typescript toString 返回一个对象

Posted

技术标签:

【中文标题】Angular Typescript toString 返回一个对象【英文标题】:Angular Typescript toString return an object 【发布时间】:2018-08-25 15:16:43 【问题描述】:

我收到一个来自 http get 调用的客户端:

    getClientById(clientId): Observable<Client>
    let params = new HttpParams().set('clientId', clientId);
    return this.httpClient.get<Client>('http://localhost:3000/clients/getClientById',  responseType: 'json', params: params );
  

我的客户端类如下所示:

export class Client 
name= '';
familyName = '';

public toString()
    return this.name+ " " +  this.familyName;

我的问题是当我调用 toString() 方法时,我收到一个 [object object]。

我做错了什么?

【问题讨论】:

听起来你得到的数据不是你想的那样 我认为它是一个客户,因为我可以做 myClient.name 并且它可以工作...... 您能告诉我们您的查询结果吗?也可以试试: let result = " "+this.name+ " " + this.familyName;返回结果; 在 toString() 方法中添加调试行以显示所有变量 你在使用 HttpClient 吗?还是您使用的是 Http 但变量名不同? 【参考方案1】:

这是对 TypeScript 的常见误解。在 TypeScript 中,泛型类型在运行时是不可见的,这意味着你不能像 httpClient.get&lt;Client&gt; 那样制作魔法映射并获得 Client 实例。 (可以使用 AST 转换器 + 类型检查器 API,但这是另一个主题)

您需要手动映射您的对象,如下所示:

getClientById(clientId): Observable<Client>
    let params = new HttpParams().set('clientId', clientId);

    return this.httpClient
        .get('http://localhost:3000/clients/getClientById', 
            responseType: 'json',
            params: params
         )
         .map(data =>
             // build the Client instance here, data is a plain javascript object
             new Client(...)
         )

您会得到[object Object],因为它是object 的默认string 值。

> ().toString()
"[object Object]"
> String()
"[object Object]"

【讨论】:

谢谢,我明白了!虽然“Observable”不能与“then”一起使用,但我会在订阅的方法中创建我的 Client 对象 this.httpClient.get&lt;Client&gt;(...) 地图 这也是我所坚持的...否则创建客户端类的意义何在? 调用httpClient.get&lt;Client&gt;()只是让打字稿知道返回的对象将实现Client接口,它确实意味着这个返回的对象将是一个实例Client (因此它可能具有相似的属性,但调用任何方法都不起作用)。在内部,httpClient 只是反序列化 json 数据,它不创建任何类的实例。所以这个答案是正确的 @mast3rd3mon asfathyb 在聊天中指出:this.clientsService.getClientById(clientId).subscribe(data => console.log(data instanceof Client); // return false

以上是关于Angular Typescript toString 返回一个对象的主要内容,如果未能解决你的问题,请参考以下文章

Angular 指令依赖注入 - TypeScript

typescript Angular 4基本动画#angular #js

Angular (TypeScript) 模型

如何将变量放入语句 [Angular,TypeScript]

Angular + TypeScript 是否为最佳实践?

Angular 2 Typescript 编译错误