我想将对象类型的键映射到对象,其中:
- 每个密钥都是原始类型中的一个密钥
- 如果值的类型是联合类型,则每个值都是{enum:数组
- 如果值的类型是not联合类型,则每个值都是{enum:Never
Example个
type OriginalType = {
foo: "a" | "b";
bar: "c";
foobar: Record<string, string>;
};
type MappedType<T> = { ... };
type ResultType = MappedType<OriginalType>;
// ResultType = {
// foo: { enum: ["a", "b"] }, // or foo: { enum: Array<"a" | "b"> }
// bar: { enum: never },
// foobar: { enum: never },
//}
我知道如何将键和值映射到新类型,但不知道如何确定类型是否为联合类型:
type IsUnion<T> = ...
type MappedType<T> = {
[K in keyof T]: IsUnion<T[K]> extends true ? { enum: Array<T[K]> } : never;
};