在我的打字稿代码中,我只需要用新值更新类的一个属性。
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);
结果是,验证类已正确更新,新类值为:{false, false, true}。 一切都运行良好,我可以使用新属性扩展类,并通过合并函数对其进行更新,我不需要关心进一步合并。怎么样,这是好方法吗? 另一种方法是逐个属性手动更新,这也是类型安全的。
这工作正常,但更干净的方法是接受Partial<ValidationState>
作为mergeValues()
的参数。你不再需要类型断言(这只是告诉编译器的一种方式:相信我,我知道我在做什么(。
你可以让mergeValues
函数的参数成为Partial<ValidationState>
,而不是强制转换。
当你投射时,你告诉 TypeScript 盲目地相信你发送的内容是正确的。使用Partial
会给你更多的类型安全性,因为 TypeScript 至少会检查传入的内容是ValidationState
的子集。