我有一个非常复杂的对象,有多个属性,我想扩展和覆盖特定的属性。
interface ComplicatedObject {
propertyOne: string,
propertyTwo: null
}
interface MoreComplicatedObject extends ComplicatedObject {
propertyTwo: string
}
基本上,通过将字符串值分配给ComplicatedObject
,将MoreComplicatedType
类型的对象转换为propertyTwo
。我想避免在propertyTwo
上使用联合类型,因为使用propertyTwo
的所有调用都假设它是字符串,而不是空值,所以我宁愿没有在我访问propertyTwo
的每个实例中包含类型检查。
如何扩展接口并覆盖现有属性的类型?
答案 0 :(得分:2)
仅当扩展接口中的类型与属性的原始类型兼容时,才可以在扩展接口时覆盖属性类型。通常情况下,当你用更严格的类型覆盖它时。
这意味着您必须具有远见并使用与所有可能扩展兼容的类型声明原始属性。在您的情况下,您可以在ComplicatedObject
中使用联合类型:
interface ComplicatedObject {
propertyOne: string,
propertyTwo: null | string
}
interface MoreComplicatedObject extends ComplicatedObject {
propertyTwo: string
}
或者您可以CompicatedObject
中描述的<body>
<script>
var a = 'Hello';
</script>
</body>
通用。