如何声明一个模块来进行命名导入?

How to declare a module to do named imports?

我正在使用 graphql-tag。我的文件就是这样。

./operation.graphql

Query User {
   ...
}

./test.ts

import { User } from './operation.graphql'; /// Module ''*.graphql'' has no exported member 'User'.

./index.d.ts

declare module '*.graphql' {
    import { DocumentNode } from 'graphql';

    const value:DocumentNode;

    export default value;
}

一个应用程序运行良好,但我想防止该错误。

当我执行默认导入时效果很好,但如您所见,我在命名导入时遇到错误。

如何申报?谢谢。 :)

如果每个 GraphQL 文件的导出名称不同,TypeScript 将不会解析您的 GraphQL 文件以自动找出它。要么您需要为每个 GraphQL 文件单独声明一个模块(并且您需要设置 baseUrlpaths 以便您可以使用非相对导入,或者将 d.ts 文件放在每个 GraphQL 文件旁边,而不是使用 declare module,我不确定):

declare module 'operation.graphql' {
    import { DocumentNode } from 'graphql';

    export const User: DocumentNode;
}

或者你可以放弃,让所有的 GraphQL 文件都是 any:

类型
declare module '*.graphql';