【问题标题】:Importing Node modules in TypeScript在 TypeScript 中导入节点模块
【发布时间】:2012-11-03 02:34:33
【问题描述】:

如何导入位于 TypeScript 中 node_modules 文件夹中的 Node 模块?

当我尝试编译以下 TypeScript 代码时,我收到一条错误消息(名称 ''async'' 在当前范围内不存在):

// Converted from: var async = require('async');
import async = module('async');

【问题讨论】:

    标签: node.js module npm typescript


    【解决方案1】:

    您需要创建一个定义文件并包含以下内容:

    module "async" {}
    

    然后在您的 TypeScript 代码中添加对此定义文件的引用

    ///<reference path='definition-file.d.ts' />
    
    import async = module('async');
    

    【讨论】:

    • 谢谢。 标签不是必需的。
    • 您可能希望将它放在一个单独的文件中(按照惯例,它应该称为 async.d.ts),然后您需要引用它。将它保存在单独文件中的额外原因是您可能希望声明该异步的导出,例如在其中声明的函数、全局变量和类。
    • 这对我有用,但后来我得到编译错误,因为空模块定义没有从实际 npm 模块导出的方法。我有一个模块的 d.ts 文件,但不知道如何将它的定义连接到我的模块 shim。
    • 此解决方案适用于旧版本的打字稿,不再有效。
    • 这不是使用import 的正确方法,因为您没有导入任何类型。仅使用var x = require('x') 给您带来的唯一好处是编译器可以控制它是 AMD 模块还是 CommonJS 模块。这可能不是你想要的。
    【解决方案2】:

    typescript 中的标准“import blah = require('x')”语义完全不适用于节点模块。

    解决此问题的最简单方法是显式定义、接口和使用 require,而不是导入:

    // You can put this in an external blah.d file if you like; 
    // remember, interfaces do not emit any code when compiled.
    interface qOrm {
        blah:any;
    }
    
    declare var require:any;
    var qOrm:qOrm = require("../node_modules/q-orm/lib/q-orm");
    
    var x = qOrm.blah;
    

    【讨论】:

      【解决方案3】:
      npm install --save-dev @types/async
      npm install --save async
      

      还有语法:

      import * as async from "async"
      

      【讨论】:

        猜你喜欢
        • 2013-08-25
        • 2017-04-03
        • 1970-01-01
        • 2018-07-04
        • 2015-08-12
        • 2019-02-27
        • 2016-12-11
        • 1970-01-01
        相关资源
        最近更新 更多