如果模块包含require,则无法找到它

时间:2016-02-25 10:08:39

标签: typescript typescript1.8

我正在尝试了解如何正确使用TypeScript和经典的JS节点模块。

我设置了一个非常基本的项目,具有以下文件架构:

.
├── index.ts
├── lodash.d.ts
├── module.ts
└── node_modules
    └── lodash

lodash已与npm一起安装。因为它似乎没有提供打字信息,所以我写了一个基本的d.ts文件,它只描述了一个函数,只是为了取悦tsc并避免因不知道lodash而出错。

lodash.d.ts

declare module "lodash" {
  export function reverse(array: any[]): any[];
}

在我的module.ts文件中,我使用require导入lodash并在模块上公开一个函数,我在index.ts文件中使用该函数。

module.ts

/// <reference path="./lodash.d.ts" />

import _ = require('lodash');

module FooModule {
  export function foo() {
    return _.reverse([1, 2, 3]);
  }
}

index.ts

/// <reference path="./module.ts" />

let a = FooModule.foo();
console.log(a);

问题是tsc(以及VS代码)告诉我它找不到名称FooModule

$ tsc index.ts --module commonjs -outDir build
index.ts(3,9): error TS2304: Cannot find name 'FooModule'.

但是,如果我从import _ = require('lodash');中移除module.ts,它就会正常工作(除了_变量现在未定义的明显事实。)

我对此require做错了吗?

1 个答案:

答案 0 :(得分:1)

您正在混合内部模块和外部模块。如果在.ts文件中使用顶级导入或导出语句,则文件本身将自动视为外部模块,其内容都是该模块的所有部分({{1}是导入语句。)

如果将内部模块放在外部模块(requiremodule关键字)中,则实际上是对模块内容进行双重包装。那不好。

采用以下示例:

<强> module.ts

namespace

如果您从外部模块import _ = require('lodash'); module FooModule { export function foo() { return _.reverse([1, 2, 3]); } } 导出内部模块foo,则功能module.FooModule.foo现在有效FooModule

module

然而,这是