我想从ALL_RESPONSE_TYPES
数组中生成union,代码如下:
interface MetadataAccepted {
a: string;
b: number;
}
interface MetadataIgnored {
c: number;
d: string;
e: {
a: string
}
}
const ALL_RESPONSE_TYPES = [
['ACCEPTED', { a: '', b: 0 } as MetadataAccepted],
['IGNORED', { c: 0, d: '', e: {a: ''} } as MetadataIgnored],
] as const;
我想创建以下类型:
type ResponseType =
| {
type: 'ACCEPTED';
metadata: {
a: string;
b: number;
};
}
| {
type: 'IGNORED';
metadata: {
c: number;
d: string;
e: { a: string }
};
};
我相信用 typescript 应该可以做到这一点。
1条答案
按热度按时间56lgkhnf1#
你可以创建一个Map的数组类型,将
ALL_RESPONSE_TYPES
的类型转换为type
/metadata
对象的数组类型,然后将index into类型与number
进行联合,如下所示:R
实用程序类型将数组类型的对(如[[0, 1],[2, 3],[4, 5]]
)转换为对象数组(如[{type:0, metadata:1},{type: 2, metadata: 3},{type: 4, metadata: 5}]
),然后对其进行索引以获得并集{type:0, metadata:1} | {type: 2, metadata: 3} | {type: 4, metadata: 5}
。当它作用于
ALL_RESPONSE_TYPES
类型时,使用thetypeof
type query operator,它会给你想要的ResponseType
:Playground代码链接