簡體   English   中英

從接口擴展Typescript類

[英]Extend a Typescript class from an interface

如何使用Typescript中的接口屬性擴展類? 我意識到這必然會使屬性未初始化。

我唯一的目的是減少代碼冗余。 出現在接口中的屬性聲明將在每個類實現中完全相同。 我寧願僅從界面集中維護那些屬性。

我想寫類似下面的內容,但這充滿了錯誤:

interface Spec {
    id: number;
}

class Model<S> {
    [K extends keyof S: string]: S[K];
}

class MyModel extends Model<Spec> {
    // id: number -- implicit
}

相反,我發現自己能夠編寫此代碼,該代碼可以構建但不能完成任務:

interface Spec {
    id: number;
}

class Model<S, K extends keyof S> {
    [K: string]: S[K];
}

class MyModel extends Model<Spec, keyof Spec> {
    // id: number -- implicit
}

顯然,當我將implements Spec添加到MyModel時,它並沒有完成工作:

class MyModel extends Model<Spec, keyof Spec> implements Spec {
    // id: number -- implicit
}

因為這樣我得到了錯誤, Property 'id' is missing in type 'MyModel'

我不必擔心未初始化接口屬性,因為始終可以從構造函數中完成。 我正在處理的過多接口是更大的噩夢。

注意:我使用底層的JS模塊填充spec屬性,因此,如果未提供其聲明,則編譯器不一定會抱怨。

您可以這樣做來聲明一個類具有接口的所有成員:

class MyModel {
  // usual stuff
}
interface MyModel extends Spec { /* don't need to write anything here */ }

此功能稱為聲明合並

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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