簡體   English   中英

如何從通用 TypeScript 類型擴展?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM