如何“弱化”一个类型的多个属性

时间:2018-07-31 21:56:50

标签: typescript

在使用自动生成的类/接口文件(通过Swagger Codegen之类的东西)时,通常有必要修改这些模型。例如,假设您有一个自动生成的HighSchool类。

export interface HighSchool {
    schoolTypeCode: number;
    name: string;
    state: string;
    city: string;
}

假设我们创建了一个枚举,以使使用已知的schoolTypeCode值变得容易。

export const enum HighSchoolTypeCode {
    USHighSchool,
    GED,
    OnlineSchool
}

除了修改自动生成的HighSchool接口以使用此枚举(重新执行自动生成后将被覆盖)外,我可以在单独的文件中创建自己的HighSchool接口,然后重新键入{{1} },使用辅助类型as described in this GitHub issue response“弱化”它。

schoolTypeCode

这是export interface HighSchool extends Weaken<HighSchool, 'schoolTypeCode'> { schoolTypeCode?: HighSchoolTypeCode; } 助手类型:

Weaken

这里的限制是一次只能削弱一个属性。可以重新构造此帮助程序类型以采用属性名称数组吗?尽管此语法可能不正确,但我正在想象它正在被这样使用:

type Weaken<T, K extends keyof T> = {
  [P in keyof T]?: P extends K ? any : T[P];
};

1 个答案:

答案 0 :(得分:4)

如果Weaken传递给您想要削弱的属性名称的并集,则interface WeakenedType extends Weaken<OriginalType, 'foo' | 'bar'> { foo?: FooEnum; bar?: BarEnum; } 会做您想要的事情,

public List<City> getCityList()