【发布时间】:2020-11-24 13:15:46
【问题描述】:
所以我有一个接口PropertyValue,其中属性descr_json要么是一个对象,要么是null:
export interface Property {
descr_json: Array<string>;
descr: string;
id: number;
}
export interface PropertyValue {
descr_json: { [key: string]: string } | null;
descr: string | number | null;
id?: number;
}
然后在我的代码中,有时我会尝试将值添加到 PropertyValue 对象的 descr_json 属性:
if (property.descr_json && property.descr_json.length) {
propertyValue.descr_json = {};
property.descr_json.forEach(subProperty => {
propertyValue.descr_json[subProperty] = '';
});
}
但在forEach 内部,TS 抱怨propertyValue.descr_json 可能为空,即使我在前一行明确将其设置为空对象。
我当然可以用一个额外的if 语句包围它,以检查descr_json 实际上是否为空,但这似乎是多余的,因为我已经知道了。
我在这里错过了什么?
【问题讨论】:
-
descr_json[subProperty]因此descr_json没有提到那个权利吗?所以它是未定义的 -
你在一个对象上使用
.length和.forEach()? -
不,
property.descr_json是一个数组 :)pValues.descr_json是一个对象。 -
您显示了两个变量
property和pValues但只有一个接口PropertyValue并且没有类型声明(在分配或任何地方)。我们怎么知道如何调试它? -
我的错,我假设对象具有相同的形状,因为它们具有相同的属性
descr_json。
标签: javascript typescript