将类型键转换为与可选参数并集



有没有办法类型将Screens类型转换为ScreensNew类型?

我想做的是:

  • 将所有一级键转换为字符串(如keyof(
  • 保持其他参数不变(未定义条带(
  • 之后为每个属性创建一个联合类型
type Screens = {
First: undefined;
Second: {
name: string;
}
}
type ScreensNew =
| "First"
| "Second": { name: string; }
}

帖子中的类型不是有效的 TS 类型。我们可以创建一个形式为type ScreensNew = | { type: "First" } | { type: "Second", name: string; }的可区分联合:

type Screens = {
First: undefined;
Second: {
name: string;
}
}
type CreateDiscriminatedProps<T> = T extends undefined ? {} : T
type CreateDiscriminated<T> = {
[P in keyof T]: { type: P } & CreateDiscriminatedProps<T[P]>
}
type ScreensNew = CreateDiscriminated<Screens>
//Same as
// type ScreensNew = {
//     First: {
//         type: "First";
//     };
//     Second: {
//         type: "Second";
//     } & {
//         name: string;
//     };
// }

游乐场链接

相关内容

最新更新