TypeScript如何约束属性与多类型属性保持类型一致
类型约束需求
数据结构中存在data、backupData两个属性,要求backupData的类型必须与data的实际类型完全一致。
初始写法的缺陷
最初采用联合类型直接定义两个属性的类型:
class ClassC{ data: InterfaceA | InterfaceB backupData: InterfaceA | InterfaceB }
这种写法无法满足类型强一致要求:它仅限定两个属性的取值都在InterfaceA和InterfaceB的范围内,但允许data为InterfaceA、backupData为InterfaceB这类类型不匹配的情况存在,TS编译阶段不会抛出任何错误。
曾考虑过将backupData设为any类型绕过校验,但这种做法会完全丢失类型安全保障,不是合理的实现方案。
可行实现方案
通过泛型即可实现两个属性的类型强绑定,代码如下:
class ClassC<T>{ data: T; backupData: T; }
- 泛型参数
T会同时约束两个属性的类型,实例化类时传入具体类型后,两个属性会被强制要求类型完全一致 - 该方案保留了完整的类型检查能力,不会出现
any类型带来的类型提示丢失、校验失效问题
内容的提问来源于stack exchange,提问作者DeltaTango
相关产品推荐
相关产品推荐

