【发布时间】:2020-10-18 08:38:30
【问题描述】:
我试图让ObjectType 中的每个Field 拥有自己的泛型,因此每个字段的resolve fn 必须返回type 属性中定义的类型。
type Scalars = {
ID: string;
Int: number;
Float: number;
String: string;
Boolean: boolean;
};
type Field<T extends keyof Scalars> = {
type: T,
resolve: () => Scalars[T];
}
type ObjectType<T extends keyof Scalars> = {
[key: string]: Field<T>
}
const objectType = <T extends keyof Scalars>(config: ObjectType<T>): any => 'todo';
objectType({
id: {
type: 'Int',
// type of `resolve` is `() => (string | number)`, should be `() => number`
resolve: () => '123',
},
name: {
type: 'String',
// should be `() => string`
resolve: () => 123,
},
});
在调查了其他一些 SO 问题后,我在https://stackoverflow.com/a/51547767/11042710 中找到了一个几乎可以解决我的问题的解决方案
这是我尝试上述建议的 TS 游乐场 TS playground.
但是当我尝试将infer P 类型传递给extends keyof Scalars 的泛型时它失败了
【问题讨论】:
标签: typescript generics