在给定如下所示的接口A
的情况下,我们设想提供查找函数以返回每个值的外部服务.
interface A {
a: string;
b: number;
c: boolean;
}
显然,外部服务S
将如下所示:
interface S {
get(name: 'a'): string;
get(name: 'b'): number;
get(name: 'c'): boolean;
}
但如何将其表示为泛型类型构造S<A>
-?
也许我们可以从观察到下面的声明在功能上与上面的声明相同开始:
type S = {
get: ((name: 'a') => string) & ((name: 'b') => number) & ((name: 'c') => boolean))
}
它的用法如下:
const c = service.get('c'); // 'c' would be type boolean here.
我try 从keyof A
开始构建,并使用以下帮助器从union移动到intersection:
type UnionToIntersection<U> =
(U extends any ? (k: U)=>void : never) extends ((k: infer I)=>void) ? I : never
但这就是我被困的地方.帮助!