我的目标是获取一个文本对象,并将每个属性转换为独立对象的联合.
例如:
{
200: number;
500: string;
}
vt.进入,进入
{
200: number;
500?: undefined;
} |
{
500: string;
200?: undefined;
}
我相信我能够得到这个水平,除了任何时候我添加一个随机属性以及一个有效的属性,它不会出错.我怎么把它的错误? ie
{
100: "why no error", // this should error error...
200: 100,
}
完整代码示例:
type AllKeys<T> = T extends unknown ? keyof T : never;
type Id<T> = T extends infer U ? { [K in keyof U]: U[K] } : never;
type _ExclusifyUnion<T, K extends PropertyKey> = T extends unknown
? Id<T & Partial<Record<Exclude<K, keyof T>, never>>>
: never;
type ExclusifyUnion<T> = _ExclusifyUnion<T, AllKeys<T>>;
type split_return_type<T> = {
[K in keyof T]: { [P in K]: T[P] };
};
type ValueOf<T> = T[keyof T];
export type SchemezLayoutReturnType<T> = Promise<
ExclusifyUnion<ValueOf<split_return_type<Required<T>>>>
>;
function TestFnx<T>(input: T, handleAsync: () => SchemezLayoutReturnType<T>) {
return {
input,
handleAsync,
}
}
type required_return_type = {
200: number;
500: string;
}
const rrr: required_return_type = {
200: 100,
500: "00"
};
TestFnx(rrr, async () => {
return {
100: "200",
200: 100,
// 500: "oii",
}
});
参考文献:Playground