我正在處理抽象父類需要繼承通過其子類提供的泛型類型的所有屬性的模式。如何從TypeScript中的通用參數擴展?
下面就來看看在構造函數基類,它提供了一個基本的想法,也可以是viewed on github:
public constructor(data: T) {
_.assign(this, _.omit(data, [
"table",
"id",
"PartitionKey",
"RowKey",
]));
}
我正在尋找一些方法來有效地表達this:
export abstract class Base<T extends EntityData> implements Storage.AbstractEntity & T {
...
不幸的是,這似乎並沒有得到支持當前等我不知所措,我怎麼可以讓我的基類擴展它的泛型參數,使得從它繼承also receives the properties of the generic type it's encapsulating任何類:
export class AuthorFact extends Base<Author> {
public get RowKey() { return (this as any).id }
}
正如你所看到的,我被迫從我的基類型中刪除& T
,並使用(this as any)
來抑制編譯器拋出錯誤。
我最終希望.id
上的類型檢查能夠成功,以及Author
的任何其他屬性都可以在我創建的實例上使用。
有沒有可能我可以使用映射類型?另外,爲什麼你使用函數而不是類來包裝一些東西? –
不知道映射類型。函數是必需的,因爲你不能'type T = A & B; class C extends T {}',因爲對於'extends',T必須是一個值和一個類型 - 你會得到'錯誤TS2693:'T'指的是一種類型,但在這裏被用作一個值。返回類類型的函數是唯一的方法。 – artem
我會記住你的答案,因爲它似乎是一種可行的方法。我只想驗證新語言功能尚未實現,可能會產生更少的...迂迴...解決方案;) –