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

Posted

技术标签:

【中文标题】如何声明一个模块来进行命名导入?【英文标题】:How to declare a module to do named imports? 【发布时间】:2019-02-05 15:57:11 【问题描述】:

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

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

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

如何声明?谢谢。 :)

【问题讨论】:

【参考方案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';

【讨论】:

谢谢。 :) 这很有帮助!

以上是关于如何声明一个模块来进行命名导入?的主要内容,如果未能解决你的问题,请参考以下文章

第十一天

如何导入 Python 命名空间包的所有子模块?

如何在(子)模块中使用 __init__.py 来定义命名空间?

pytest模块导入ImportError:没有模块命名

如何从 ES6 模块导入默认和命名

如何选择性地导入 ES2015 模块功能,但使用命名空间?