【发布时间】:2019-12-28 08:58:42
【问题描述】:
我正在尝试在 typescript 中创建一个可以由子模型扩展的通用模型类,以便创建自动 HTTP 数据以对超类中的处理方法进行建模。
一个基本的子模型可能是这样的:
export class User extends Model {
private username: string = null;
constructor () {
super ();
this.processJson ();
}
}
我们的父模型类执行如下操作:
export class Model {
constructor () {
}
public processJson<T> () {
_.forEach (Object.keys (this), (key: string) => {
console.log (`processing key: ${key}`);
console.log (typeof this[key]);
})
}
}
计划是使用processJson 方法作为单个入口点来获取入站 JSON 数据并根据其定义将其处理到我们的子模型中。
这里的问题是我似乎无法获得在子模型中定义的声明类型,在提供的示例中,typeof this[key] 将返回 object,因为它推断了此分配值的类型例如null。
我的计划是将其用于更复杂的情况,我们可能有更复杂的对象或具有特殊处理的不同类型,并在我们的父模型类中的一个集中位置执行所有这些。
我的问题是这样的,我怎么知道子模型的属性,得到我们username示例的声明类型为string而不是object?
这是对生成的底层 JavaScript 的限制吗?还是我误解了声明的类属性在 Typescript 中是如何工作的?
我知道在将属性声明为时:
private username: string = '';
它会给我正确的类型,但我不想在它们被 JSON 数据分配之前初始化值,因为在某些情况下null 可能是一个有效值。
【问题讨论】:
标签: angular typescript