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