很抱歉是否已经提出这个问题。我尽力找到解决方案,但可能找不到正确的术语。
我的问题始于这种结构。这是一个简单的映射类型:
type Mapped = {
square: {
size: number;
};
rectangle: {
width: number;
height: number;
};
};
然后我有一个试图创建联合的类型:
type Unionize<T> = {
name: keyof T;
data: T[keyof T];
};
type Out = Unionize<Mapped>;
它产生这种类型:
type Generated = {
name: "square" | "rectangle";
data: {
size: number;
} | {
width: number;
height: number;
};
}
但是我真正想要的是,因为这样我就可以区分杠杆作用的联合来推断和检查数据属性。
type Wanted = {
name: "square";
data: {
size: number;
};
} | {
name: "rectangle";
data: {
width: number;
height: number;
};
}
答案 0 :(得分:2)
与其使用name
独立生成data
和keyof T
类型,不如使用映射类型将正确的name
和data
合并在一起T
的键,然后按keyof T
对其进行索引以建立并集。
type Unionize<T> = {
[P in keyof T]: {
name: P;
data: T[P];
}
}[keyof T];