【发布时间】:2020-05-08 23:59:09
【问题描述】:
我需要通过字符串属性名称更新类的属性值。我首先通过此方法确保属性名称有效:
export class ClientDTO {
...
static isValidPropertyName(name: string): name is keyof ClientDTO {
return (name as keyof ClientDTO) !== undefined
}
}
然后在另一个班级我正在这样做:
foo(key: string, newValue: string) {
if (!ClientDTO.isValidPropertyName(key)) {
return
}
if (newValue !== this.originalClient[key]) {
// @ts-ignore
this.originalClient[key] = newValue
}
}
查找现在运行良好,但要进行更新,我必须将 // @ts-ignore 放在那里,我真的很想弄清楚如何正确地做到这一点,而不必在那里忽略。
我开启了严格的检查,所以我得到了错误
TS2322:类型“any”不可分配给类型“never”
【问题讨论】:
-
//@ts-ignore被删除时会出现什么错误? -
TS2322:类型“any”不可分配给类型“never”
-
您确定
name as keyof ClientDTO在运行时验证任何内容吗?ClientDTO是否有任何非string属性? -
我假设
this.originalClient是ClientDTO的一个实例,对吧?如果是这样,它上面的所有实例属性都是string类型的吗?还是有多种类型? -
是的,它是一个 ClientDTO。这是多种类型的混合。字符串、布尔值、日期和数字。
标签: typescript keyof typescript3.8