如何扩展界面并覆盖属性的类型?

时间:2017-05-19 20:52:09

标签: javascript typescript

我有一个非常复杂的对象,有多个属性,我想扩展和覆盖特定的属性。

interface ComplicatedObject {
  propertyOne: string,
  propertyTwo: null
}

interface MoreComplicatedObject extends ComplicatedObject {
  propertyTwo: string
}

基本上,通过将字符串值分配给ComplicatedObject,将MoreComplicatedType类型的对象转换为propertyTwo。我想避免在propertyTwo上使用联合类型,因为使用propertyTwo的所有调用都假设它是字符串,而不是空值,所以我宁愿没有在我访问propertyTwo的每个实例中包含类型检查。

如何扩展接口并覆盖现有属性的类型?

1 个答案:

答案 0 :(得分:2)

仅当扩展接口中的类型与属性的原始类型兼容时,才可以在扩展接口时覆盖属性类型。通常情况下,当你用更严格的类型覆盖它时。

这意味着您必须具有远见并使用​​与所有可能扩展兼容的类型声明原始属性。在您的情况下,您可以在ComplicatedObject中使用联合类型:

interface ComplicatedObject {
  propertyOne: string,
  propertyTwo: null | string
}

interface MoreComplicatedObject extends ComplicatedObject {
  propertyTwo: string
}

或者您可以CompicatedObject中描述的<body> <script> var a = 'Hello'; </script> </body> 通用。