【问题标题】:Angular Typescript toString return an objectAngular Typescript toString 返回一个对象
【发布时间】: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 但变量名不同?

标签: node.js angular mongodb


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 2021-07-13
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多