Angular 5:检查铸造对象的类型

时间:2018-06-12 11:34:56

标签: angular typescript oop

我从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字符串?

2 个答案:

答案 0 :(得分:1)

键入请求不会创建类的新实例,它只是让您完成IDE。

如果要创建类的新实例,可以采用多种方法。

最简单的就是这样的

export class Tree {
  constructor(payload: any) {
    Object.assign(this, payload);
  }
}

现在创建一个新实例只需执行此操作

const t = new Tree(requestResponse);

请注意,在此之后,typeof t仍会返回一个对象,但t instanceof Tree将返回truet.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
        }
    }
}