从对象类型构造联合类型
Construct a union type from an object type
我有一个看起来像这样的类型:
type MessageTypes = {
foo: { bar: string };
baz: { qux: string, quux: string };
corge: { grault: number };
};
我想定义一个类型,它给我类似的东西:
| {
op: 'foo';
data: { bar: string };
}
| {
op: 'baz';
data: { qux: string, quux: string };
}
| {
op: 'corge';
data: { grault: number };
}
到目前为止我最接近的是:
type KnownMessage = {
[T in keyof MessageTypes]: { op: T; data: MessageTypes[T] };
};
但是,我不关心这种类型的键,只关心值。
使用 MessageTypes
定义我的特殊联合类型的最佳方法是什么?
非常接近;只需像这样获得所有值的联合:
type KnownMessage = {
[T in keyof MessageTypes]: { op: T; data: MessageTypes[T] };
}[keyof MessageTypes];
之所以有效,是因为:
{
foo: 1,
bar: 2,
}["foo" | "bar"]
生成值 1
和 2
的并集 => 1 | 2
我有一个看起来像这样的类型:
type MessageTypes = {
foo: { bar: string };
baz: { qux: string, quux: string };
corge: { grault: number };
};
我想定义一个类型,它给我类似的东西:
| {
op: 'foo';
data: { bar: string };
}
| {
op: 'baz';
data: { qux: string, quux: string };
}
| {
op: 'corge';
data: { grault: number };
}
到目前为止我最接近的是:
type KnownMessage = {
[T in keyof MessageTypes]: { op: T; data: MessageTypes[T] };
};
但是,我不关心这种类型的键,只关心值。
使用 MessageTypes
定义我的特殊联合类型的最佳方法是什么?
非常接近;只需像这样获得所有值的联合:
type KnownMessage = {
[T in keyof MessageTypes]: { op: T; data: MessageTypes[T] };
}[keyof MessageTypes];
之所以有效,是因为:
{
foo: 1,
bar: 2,
}["foo" | "bar"]
生成值 1
和 2
的并集 => 1 | 2