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<Client>
那样制作魔法映射并获得 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<Client>(...)
是地图
这也是我所坚持的...否则创建客户端类的意义何在?
调用httpClient.get<Client>()
只是让打字稿知道返回的对象将实现Client
接口,它确实不意味着这个返回的对象将是一个实例Client
的 (因此它可能具有相似的属性,但调用任何方法都不起作用)。在内部,httpClient
只是反序列化 json 数据,它不创建任何类的实例。所以这个答案是正确的
@mast3rd3mon asfathyb 在聊天中指出:this.clientsService.getClientById(clientId).subscribe(data => console.log(data instanceof Client); // return false以上是关于Angular Typescript toString 返回一个对象的主要内容,如果未能解决你的问题,请参考以下文章
typescript Angular 4基本动画#angular #js