【发布时间】:2019-12-21 21:18:38
【问题描述】:
在我的打字稿代码中,我只需要用新值更新我的类的一个属性。
export class ValidationState {
isLabourComponentValid: boolean = true;
isTableValid: boolean = true;
isFaultCausingPartValid: boolean = true;
public mergeValues(newValue: ValidationState){
Object.assign(this, newValue);
return this;
}
}
用法是:我只向合并函数发送一个属性,我强制转换属性,以匹配所需的类型,即使不是那种类型,但打字稿让我去做。
ValidationState.mergeValues({isLabourComponentValid: false} as ValidationState);
ValidationState.mergeValues({isTableValid: false} as ValidationState);
结果是,Validation 类已正确更新,新的类值为:{false, false, true}。 一切正常,我可以使用新属性扩展类,并通过合并功能对其进行更新,我不需要关心进一步的合并。然而,这是一个好方法吗? 其他方法是逐个属性手动更新属性,这也是类型安全的。
【问题讨论】:
-
我允许它,因为 casting 是为了在某种程度上绕过类型系统。这是由程序员完成的,以告诉编译器将给定的值视为不同的类型,而不管编译器的想法如何。它本质上是不安全的,是的,但它绕过了程序员确实知道
Array<Animal>实际上只有Cat对象的情况。
标签: angular typescript casting