[英]How to extend from a generic TypeScript type?
我想要一個類型/接口,它包含來自給定泛型類型的所有屬性並添加更多屬性,即擴展它。 另外,我希望能夠將這種類型的任何 object “向下轉換”到它擴展的那個。
我永遠不會實例化任何添加該屬性的類型的新 object,因為它只會充當 object 的“合同”。 因此,我認為它永遠不應該是 class。
到目前為止,我已經嘗試將這兩種類型相交,如下所示:
class MyClass{
prop1: string;
prop2: string;
constructor(){
this.prop1 = '1';
this.prop2 = '2';
}
}
type MyType<T> = T & {
additionalProp: string;
}
myService.getData()
.subscribe((res: MyType<MyClass>) => {
//Do something with res.additionalProp...
//This one should *not* have "additionalProp" yet it somehow does.
let anObject: MyClass = <MyClass>res;
console.log(anObject);
//output: {prop1: '1', prop2: '2', additionalProp: 'valuefromresponse'}
});
我可能很傻,但我還沒有弄清楚為什么我的示例中的anObject
仍然具有MyType
引入的屬性。
為了澄清,我使用 generics 而不是直接擴展MyClass
以便能夠沿代碼重用MyType
合同。
感謝您的幫助, @Aleksey L.和@Tomasz Gawel 。 我保持MyType
相同,並選擇將以下內容添加到MyClass
:
static fromObject<T extends MyClass>(o: T) {
return new MyClass(o.prop1, o.prop2);
}
我知道它使用 static 方法等等,但這是我能想到的最干凈的解決方案。 有了這個,我可以調用let anObject: MyClass = MyClass.fromObject(res);
,用我原來的方法解決了這兩個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.