如何从TypedDocumentNode泛型中提取目标TypeScript类型?
提取TypedDocumentNode中的目标泛型类型
完全可以实现,利用TypeScript的条件类型和infer关键字就能提取TypedDocumentNode的第一个泛型参数(也就是你要的TypeIWant)。
实现步骤:
- 定义一个工具类型,专门提取目标泛型:
type ExtractQueryType<T> = T extends TypedDocumentNode<infer TargetType, any> ? TargetType : never;
- 用这个工具类型处理你的变量类型:
const myVar = gql(somestring); // gql为库函数 type myVarType = typeof myVar; type WantedType = ExtractQueryType<myVarType>; // 此时WantedType就是TypeIWant
原理说明:
infer TargetType会让TypeScript自动推断TypedDocumentNode第一个泛型参数的具体类型,并将其赋值给TargetType- 条件类型会判断传入的
T是否符合TypedDocumentNode<*, *>的结构,符合则返回推断出的TargetType,否则返回never
如果是用GraphQL Codegen,它通常会直接为你的GraphQL查询生成对应的类型文件,不需要手动做这种提取,但手动提取的方案在需要临时处理类型时完全可用。
内容的提问来源于stack exchange,提问作者BrinkDaDrink
相关产品推荐
相关产品推荐

