你可以制作两个版本的界面,一个是全部可选的,一个是所有必填字段,同时保持DRY?

时间:2017-11-30 14:06:37

标签: typescript interface dry

我有一个名为IPreferences的界面。它看起来像这样:

export interface IPreferences { 
    genres: Genres[],
    singers: Singer[],
    volume: number
}

由于我允许用户更新其首选项并仅更新一个或多个字段,因此我创建了一个类似于

的界面IPreferenceUpdateRequest
export interface IPreferencesUpdateRequest { 
    genres?: Genres[],
    singers?: Singer[],
    volume?: number
}

但这很糟糕,因为我现在有两个几乎相同的界面。

我有没有这样做,但留下DRY

2 个答案:

答案 0 :(得分:1)

是的,typescript中定义的Partial<T>类型允许您以非常干的方式进行此操作:

export type IPreferencesUpdateRequest  = Partial<IPreferences>;

答案 1 :(得分:1)

是的!使用Partial<IPreferences>TypeScript standard library中定义的Partial<T>类型是mapped type,它将T的所有属性映射到可选版本:

export type IPreferencesUpdateRequest = Partial<IPreferences>

希望有所帮助;祝你好运!