【发布时间】:2021-10-10 07:27:18
【问题描述】:
我有一个关于 TypeScript 4.1.5 的类型问题。
考虑以下示例。我在getItems 中进行了 GraphQL 查询,结果items 隐含地知道调用此函数后生成的未命名类型。后来想做一个map操作,需要为每个元素指定一个类型。
const items = getItems(); // calling a GraphQL query
const transformedItems = items.map((item: any) => {
return {
// transformation logic here
};
});
在 VSCode 中将鼠标悬停在 items 上会发现该类型是一个未命名的生成类型的数组,该数组专门包含我在 getItems 的 GraphQL 查询中要求的属性和连接器:
const items: ({
__typename?: "myItem" | undefined;
} & Pick<myItem, "id" | "createdAt" | "updatedAt" | "apiId" | "lastUpdated" | "balanceAfterThis" | ... 23 more ... | "apiCreatedAt">)[]
现在我只使用了any 类型,因为我无法导入生成的类型并在此处使用它。 (我认为graphql-codegen 并没有费心给它一个名称来导出它。)我知道这个any 类型的解决方案会掩盖如果我可以在这里指定正确的类型就会被捕获的错误。我想使用正确的类型,但我不知道该怎么做。
(另外我不想为了避免类型问题而将映射操作重写为循环。)
(另外我不想手动写出这个生成的类型,因为 GraphQL 函数以后可能会更改,我也必须更改手动类型定义。)
有没有办法以编程方式获取存储在items 中的类型并在映射操作中使用它?或者也许有另一种方法来解决这种类型的问题?请告诉我。感谢您的时间和考虑。
【问题讨论】:
标签: typescript types typescript-generics