给定一个接口,例如:
interface A {
AA : string
AB : number
}
Run Code Online (Sandbox Code Playgroud)
我想要一个类型,它是每个可能选择的类型的联合,例如:
type B = Pick<A, "AA"> | Pick<A,"AB">
Run Code Online (Sandbox Code Playgroud)
或者,如果不熟悉 Pick:
type B = {AA: string} | {BB : number}
Run Code Online (Sandbox Code Playgroud)
我不想像上面那样手动写出来。我希望能够编写某种通用类型或函数来为我做这件事,例如
type B = OneOf<A>
Run Code Online (Sandbox Code Playgroud)
如何编写“OneOf”,或者打字稿中最接近的当前近似值/解决方法是什么?
这样的事情怎么样:
type OneOf<T> = {[K in keyof T]: Pick<T, K>}[keyof T];
Run Code Online (Sandbox Code Playgroud)
使用该结构,您的示例将如下所示:
interface A {
AA: string;
AB: number;
}
declare var x: OneOf<A>;
// x now has type:
// Pick<A, "AA"> | Pick<A, "AB">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2288 次 |
| 最近记录: |