有没有办法类型将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;
// };
// }
游乐场链接