我是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'."
当我删除import指令时,它完全编译,但_在运行时未定义。
我还尝试将导入放在模块中但没有成功。
对不起这一定是一个非常愚蠢的问题,但我无法弄清楚。
谢谢
编辑:
我明白了这个问题。引用lodash的类型创建了范围中的变量_
。这就是为什么没有输入线就能编好的原因。问题是引用键入并不真正导入lodash。这就是它在运行时失败的原因。
当我导入lodash时,编译失败,因为lodash已经在范围内。
感谢您的支持。
答案 0 :(得分:1)
我不是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
关键字。