我是TypeScript的新手,尝试加载lodash时遇到问题。

这是我的代码:

///<reference path="../../typings/lodash/lodash.d.ts"/>
///<reference path="../interfaces/IScheduler.ts"/>

import _ = require('lodash');

module MyModule {

  export class LeastUsedScheduler implements IScheduler {
     /// CODE HERE
  }
}


我尝试通过以下方式替换导入行:

import * as _ from lodash;


在两种情况下,我得到:

"error| Cannot find name 'IScheduler'."


当我删除导入指令时,它可以完美编译,但是_在运行时未定义。

我也尝试将导入操作放入模块中而没有成功。

对不起,这肯定是一个非常愚蠢的问题,但我无法弄清楚。

谢谢

编辑:

我了解这个问题。引用lodash的类型会在范围内创建变量_。这就是为什么无需导入行即可编译良好的原因。问题是引用类型并没有真正导入lodash。这就是为什么它在运行时失败。

当我导入lodash时,编译失败,因为lodash已在范围内。

谢谢您的支持。

最佳答案

对于这个问题,我不是100%的人,但是您可以尝试以下方法,让我知道如何进行吗?

///<reference path="../../typings/lodash/lodash.d.ts"/>
///<reference path="../interfaces/IScheduler.ts"/>

import _ = require("lodash");

export class LeastUsedScheduler implements IScheduler {
  doSomething(){
    _.each([],function name(parameter) {
        // ...
    });
  }
}


编译后看起来像:

var _ = require("lodash");
var LeastUsedScheduler = (function () {
    function LeastUsedScheduler() {
    }
    LeastUsedScheduler.prototype.doSomething = function () {
        _.each([], function name(parameter) {
            throw new Error("Not implemented yet");
        });
    };
    return LeastUsedScheduler;
})();
exports.LeastUsedScheduler = LeastUsedScheduler;


如果导入模块import _ = require("lodash");但不使用它,TypeScript将删除导入(出于这个原因,我添加了doSoemthing方法)。

更新:为什么不起作用?

问题是module关键字用于声明内部模块。同时,代码正在加载外部模块。您应该避免混合使用内部和外部模块。您可以在http://www.codebelt.com/typescript/typescript-internal-and-external-modules/上了解有关内部和外部模块之间差异的更多信息。

另外,如果您使用内部模块,请避免使用module关键字,因为它已被弃用,而应使用namespace关键字。

关于node.js - 无法导入lodash,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32897567/

10-16 18:59