【发布时间】:2014-08-12 00:09:47
【问题描述】:
现在我确定问题是因为其中包含一个 d.ts 文件,其中包含一个名为“Shared”的模块,以及一个包含同名变量(如果在 NodeJS 环境中使用)的 require 语句。
// shared.d.ts
declare module Shared { ... }
// other_module.ts
/// <reference path="shared.d.ts"/>
if(require) { var Shared = require("shared"); }
export class Something {
public someVar = new Shared.SomethingElse("blah");
}
所以当我编译other_module.ts(实际上是很多单独的文件)时,它告诉我 Shared 是一个重复的标识符,我可以理解为 TS 认为 Shared 是一个模块,但随后被告知它是要求返回。
这里的问题是模块的输出需要与nodeJS的require系统兼容,所以在这种情况下,当需要other_module时,它将在自己的范围内并且不会知道Shared.SomethingElse所以需要require所以other_module 中的内部模块将能够访问共享库,但在浏览器环境中它将通过全局范围获得 Shared.SomethingElse。
如果我删除引用,则文件将无法编译,因为它不知道 Shared,如果我在将模块加载到 nodejs (var otherModule = require("other_module")) 时删除 require,它会抱怨它不知道关于Shared。那么有没有办法解决这个问题呢?
【问题讨论】:
标签: javascript node.js typescript tsc