你能制作一个界面的两个版本,一个全是可选字段,一个全是必填字段,同时保持 DRY 吗?
Can you make two versions of an interface, one with all optional and one with all required fields, while staying DRY?
我有一个名为 IPreferences
的界面。它看起来像这样:
export interface IPreferences {
genres: Genres[],
singers: Singer[],
volume: number
}
因为我允许用户更新他的偏好并且只更新一个或多个字段,所以我创建了一个界面 IPreferenceUpdateRequest
看起来像
export interface IPreferencesUpdateRequest {
genres?: Genres[],
singers?: Singer[],
volume?: number
}
但这很糟糕,因为我现在有两个几乎相同的界面。
我有没有办法做到这一点,但留下 DRY?
是的,打字稿中定义的 Partial<T>
类型允许您以非常干燥的方式做到这一点:
export type IPreferencesUpdateRequest = Partial<IPreferences>;
是的!使用 Partial<IPreferences>
。 TypeScript standard library is a mapped type 中定义的 Partial<T>
类型将 T
的所有属性映射到可选版本:
export type IPreferencesUpdateRequest = Partial<IPreferences>
希望对您有所帮助;祝你好运!
我有一个名为 IPreferences
的界面。它看起来像这样:
export interface IPreferences {
genres: Genres[],
singers: Singer[],
volume: number
}
因为我允许用户更新他的偏好并且只更新一个或多个字段,所以我创建了一个界面 IPreferenceUpdateRequest
看起来像
export interface IPreferencesUpdateRequest {
genres?: Genres[],
singers?: Singer[],
volume?: number
}
但这很糟糕,因为我现在有两个几乎相同的界面。
我有没有办法做到这一点,但留下 DRY?
是的,打字稿中定义的 Partial<T>
类型允许您以非常干燥的方式做到这一点:
export type IPreferencesUpdateRequest = Partial<IPreferences>;
是的!使用 Partial<IPreferences>
。 TypeScript standard library is a mapped type 中定义的 Partial<T>
类型将 T
的所有属性映射到可选版本:
export type IPreferencesUpdateRequest = Partial<IPreferences>
希望对您有所帮助;祝你好运!