【问题标题】:How to use an node module without typings from Typescript如何在不从 Typescript 输入的情况下使用节点模块
【发布时间】:2017-04-21 05:11:16
【问题描述】:

我正在尝试从 node_modules 导入一个外部模块,只需这样做:

import { offline } from 'redux-offline';

来自文件/src/store/store.ts。但是,我收到以下错误:

找不到模块redux-offline

我读到我们可以声明一个模块,比如redux-offline.d.ts,我们在其中定义了一种虚拟声明,然后我们可以从源代码中使用它。然而,我一点也不明白:

  • 该文件应定义在哪个文件夹中?
  • Typescript 如何知道该模块正在声明外部模块的接口?

感谢您帮助我们了解它的工作原理。

【问题讨论】:

    标签: typescript typescript-typings


    【解决方案1】:

    该文件应该定义在哪个文件夹中?

    这些文件实际上可以在任何文件夹中声明,但是最好将它们放在一起,放在描述它们的目录中。在我们的项目中,我们有一个名为“ambient-types”的文件夹,其中有一个“external-modules”文件夹。

    我听说我们可以声明一个模块,比如 redux-offline.d.ts

    你是对的,这将位于 external-modules 文件夹中。

    Typescript 如何知道该模块正在声明外部模块的接口?

    在你的 redux-offline.d.ts 文件中,我们声明了所谓的环境声明,它看起来如下:

    declare module 'redux-offline';
    

    redux-offline 现在可以从您自己的文件中导入。

    import { redux-offline } from 'redux-offline';
    

    这基本上告诉 Typescript,在运行时你期望会有一个名为 redux-offline 的文件/库可用。请注意,导入将具有“任何”类型。

    环境声明是您通过 编译器。如果这些在运行时不存在并且您尝试使用它们, 事情会毫无预​​兆地中断。

    更多参考请参阅 - https://basarat.gitbooks.io/typescript/docs/types/ambient/d.ts.html https://www.typescriptlang.org/docs/handbook/modules.html

    【讨论】:

      猜你喜欢
      • 2016-07-12
      • 2016-06-03
      • 2021-01-27
      • 2013-08-25
      • 2017-11-05
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      相关资源
      最近更新 更多