1
我有一个非常复杂的对象,我想要扩展和重写一个特定的属性的多个属性。如何扩展接口并覆盖属性的类型?
interface ComplicatedObject {
propertyOne: string,
propertyTwo: null
}
interface MoreComplicatedObject extends ComplicatedObject {
propertyTwo: string
}
本质上,对象与ComplicatedObject
类型通过向propertyTwo
分配一个字符串值被转换为MoreComplicatedType
。我想避免在propertyTwo
上使用联合类型,因为所有使用propertyTwo
的调用都假定它是一个字符串,而不是空值,所以我宁愿不必在每次访问propertyTwo
时都包含类型检查。
如何扩展接口并覆盖现有属性的类型?
这样做会违反Liskov替换原则。你可以使'ComplicatedObject'成为一个通用的接口,并且使泛型的'propertyTwo'成为可能?这样你根本不需要'MoreComplicatedObject',并且不违反LSP。 TypeScript 2.3支持默认的类型参数,因此您不必始终提供参数。 – Amy
你可以做的另一件事是使用'Pick'类型来挑选你想保持的属性,然后添加你想要的任何类型的新属性。像''MoreComplicatedObject'扩展Pick {propertyTwo:string; }' –
Aaron