我从REST-API请求HttpClient
一组Tree
个对象:
this.http.get<Tree[]>('url...');
未调用树对象的构造函数,但我需要Tree的类方法。所以我在Tree
类中构建了一个重载的构造函数,它接受obj: Tree
并使用给定的rest-api-object中的值设置类变量:
constructor(obj: Tree);
constructor(id: string, conf: Config);
constructor(idOrObj: string | Tree, conf?: Config){
if(idOrObj instanceof Tree){
this.id = idOrObj.id
...
}
}
instanceof
检查不起作用,因为REST请求中的转换Tree对象不是“真正的”Tree
对象。
如何检查idOrObj
参数是来自REST-API的只有Tree
对象还是id字符串?
答案 0 :(得分:1)
键入请求不会创建类的新实例,它只是让您完成IDE。
如果要创建类的新实例,可以采用多种方法。
最简单的就是这样的
export class Tree {
constructor(payload: any) {
Object.assign(this, payload);
}
}
现在创建一个新实例只需执行此操作
const t = new Tree(requestResponse);
请注意,在此之后,typeof t
仍会返回一个对象,但t instanceof Tree
将返回true
而t.constructor.name
将返回Tree
。
答案 1 :(得分:1)
更简单的方法是测试string
参数,并假设它是Tree
,否则:
class Tree {
id: string
constructor(obj: Tree);
constructor(id: string, conf: Config);
constructor(idOrObj: string | Tree, conf?: Config) {
if (typeof idOrObj !== 'string' ) {
Object.assign(this, idOrObj); // idOrObj will be typed as Tree
}
}
}