我有一个非常复杂的对象,它有多个属性,我想扩展和覆盖一个特定的属性。
interface ComplicatedObject {
propertyOne: string,
propertyTwo: null
}
interface MoreComplicatedObject extends ComplicatedObject {
propertyTwo: string
}
本质上,类型为 ComplicatedObject
MoreComplicatedType
为 propertyTwo
。我想避免在 propertyTwo
上使用联合类型,因为所有使用 propertyTwo
的调用都假定它是一个字符串,而不是空值,所以我宁愿不必包含类型检查我访问的每个实例 propertyTwo
。
如何扩展接口并覆盖现有属性的类型?
原文由 dstaley 发布,翻译遵循 CC BY-SA 4.0 许可协议
仅当扩展接口中的类型与属性的原始类型兼容时,才可以在扩展接口时覆盖属性类型。通常的情况是当你用更严格的类型覆盖它时。
这意味着您必须有先见之明,并使用与所有可能的扩展兼容的类型声明原始属性。在您的情况下,您可以在
ComplicatedObject
中使用联合类型:或者您可以使
CompicatedObject
通用,如 本答案 中所述。