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

lef*_*ick 5 module typescript graphql graphql-tag

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

./操作.graphql

Query User {
   ...
}
Run Code Online (Sandbox Code Playgroud)

./测试.ts

import { User } from './operation.graphql'; /// Module ''*.graphql'' has no exported member 'User'.
Run Code Online (Sandbox Code Playgroud)

./index.d.ts

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

    const value:DocumentNode;

    export default value;
}
Run Code Online (Sandbox Code Playgroud)

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

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

如何声明这一点?谢谢。:)

Mat*_*hen 7

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

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

    export const User: DocumentNode;
}
Run Code Online (Sandbox Code Playgroud)

或者您可以放弃并让所有 GraphQL 文件均为以下类型any

declare module '*.graphql';
Run Code Online (Sandbox Code Playgroud)