【发布时间】:2021-06-04 08:53:33
【问题描述】:
我正在尝试根据某些标志将一种类型动态映射到另一种类型,这可能会导致可选字段。
type Constraint = {
required: boolean,
callback: () => any,
}
type Schema = Record<string, Constraint>;
const mySchema: Schema = {
bar: {
required: true,
callback: () => 1
},
foo: {
required: false,
callback: () => true
}
}
type MapSchemaToOutput<T extends Schema> = {
[K in keyof T as T[K]['required'] extends true ? K : never]: ReturnType<T[K]['callback']>
} & {
[K in keyof T as T[K]['required'] extends false ? K : never]?: ReturnType<T[K]['callback']>
}
type Output = MapSchemaToOutput<typeof mySchema>;
最终目标是让输出相等:
{
bar: number,
foo?: boolean
}
我知道我可以手动进行映射,想知道这是否可以动态完成。
【问题讨论】:
标签: typescript typescript-typings mapped-types