Угловой 5: Проверьте тип отлитого объекта - PullRequest
0 голосов
/ 12 июня 2018

Я запрашиваю у REST-API с HttpClient массивом Tree объектов:

this.http.get<Tree[]>('url...');

Конструктор объектов дерева не вызывался, но мне нужны методы класса дерева,Поэтому я создаю перегруженный конструктор в классе Tree, который принимает obj: Tree, и устанавливаю переменные класса со значениями из данного объекта rest-api:

constructor(obj: Tree);
constructor(id: string, conf: Config);
constructor(idOrObj: string | Tree, conf?: Config){
 if(idOrObj instanceof Tree){
  this.id = idOrObj.id
  ...
 }
}

Проверка instanceof не выполняетЭто не работает, потому что приведенный объект Tree из запроса REST не является "реальным" Tree объектом.

Как проверить, является ли параметр idOrObj приведенным объектом Tree из REST?-API или просто строка идентификатора?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Более простой подход заключается в проверке параметра 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
        }
    }
}
0 голосов
/ 12 июня 2018

Ввод запроса не создает новый экземпляр вашего класса, он просто дает вам завершение 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...