【问题标题】:How to declare a module to do named imports?如何声明一个模块来进行命名导入?
【发布时间】:2026-02-08 19:10:01
【问题描述】:

我正在使用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;
}

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

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

如何声明?谢谢。 :)

【问题讨论】:

    标签: typescript module graphql graphql-tag


    【解决方案1】:

    如果您想要的每个 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';
    

    【讨论】:

    • 谢谢。 :) 这很有帮助!