TypeScript использует структурную типизацию , т. Е. c
объект не обязательно должен быть экземпляром Cow
класса , чтобы соответствовать Cow
типу .
Типы TypeScript существуют только во время компиляции и никак не влияют на вывод JS (за исключением испускаемых типов, которые используются для Angular DI).as Cow
утверждает, что res
соответствует типу Cow
, а instanceof Cow
ожидает, что c
является экземпляром класса Cow
.Поскольку Cow
не был создан, cow instanceof Cow
имеет значение false.
Класс должен быть разработан для поддержки гидратации (возможно, через параметры конструктора) и создан в явном виде:
class Cow {
sound: string;
}
return this.http.get<Cow>(ApiRoute.GET_COW, options)
.map(res => Object.assign(new Cow(), res as Cow))
.toPromise()
.then((c: Cow) => {
console.log(c instanceof Cow);
})
Еслинекоторая логика необходима для создания Cow
экземпляра из простого объекта (проверка, построение вложенного объекта), это можно сделать в конструкторе классов или в отдельной вспомогательной функции (например, Cow
статический метод).