有一组接口:
export interface FormData<T extends ControlData = any> {
[type: string]: T;
}
export type FormResult<T extends FormData> = {
[type in keyof T]: T[type];
};
export interface ControlData<T = any> {
value: T;
}
export interface ButtonSelectControlData<T> extends ControlData<T> {
query: string;
}
export interface RoutesAddCityData extends FormData {
cityId: ButtonSelectControlData<number>;
routeId: ControlData<number>;
}
当我使用FormResult时:
(data: FormResult<RoutesAddCityData>) => {
// ...
}
按预期,我在IDE中看到data.cityId
的类型为ButtonSelectControlData<number>
,而data.routeId
的类型为ControlData<number>
。
但我想在两种情况下都看到类型编号。有可能吗?
答案 0 :(得分:1)
如果我理解正确,您希望FormResult
类型从ButtonSelectControlData
和ControlData
中提取基础类型参数。如果是这样,那么一种可能的解决方案是创建一个条件类型:
type FormResult<T> = {
[K in keyof T]: T[K] extends ControlData<infer U>
? U
: never
}