我可以声明模块在Typescript中全局可用吗?

我可以声明模块在Typescript中全局可用吗?,typescript,backbone.js,Typescript,Backbone.js,我正在使用TypeScript构建一个包含主干、木偶和主干关联的web应用程序 使用Webpack的ProvidePlugin,这些库将被捆绑并随处可用,但为了让TS编译器满意,我需要在我的应用程序中的每个模块中添加以下内容: import * as _ from "underscore"; import * as Backbone from "backbone"; import * as Marionette from "backbone.marionette"; import "backbo

我正在使用TypeScript构建一个包含主干、木偶和主干关联的web应用程序

使用Webpack的ProvidePlugin,这些库将被捆绑并随处可用,但为了让TS编译器满意,我需要在我的应用程序中的每个模块中添加以下内容:

import * as _ from "underscore";
import * as Backbone from "backbone";
import * as Marionette from "backbone.marionette";
import "backbone-associations";
这可能有数百个模块/文件

无论如何,是否有必要告诉TypeScript这些将是普遍可用的?可能是tsconfig.json中的某些设置?

它取决于(例如)
下划线
键入。如果您使用的是TS 2+,编译器应该在
node_modules/@types/..
中选择所有类型。您还可以在
tsconfig.json
typings
属性中自己指定它们

它将显示以下错误:

"_" refers to a UMD global, but the current file is a module.
Consider adding an import instead.
解决这个问题的一种方法是创建一个自定义的
.d.ts
文件,您可以将其称为
global.d.ts.
无所谓。将其放入TS项目并添加以下内容:

import * as _ from 'underscore';

declare global {
  const _:_.UnderscoreStatic;
}
现在,
下划线
应该在全球范围内可用,并且您还应该能够混合使用UMD+ES
导入
/
导出
语句

这取决于(例如)
下划线
打字。如果您使用的是TS 2+,编译器应该在
node_modules/@types/..
中选择所有类型。您还可以在
tsconfig.json
typings
属性中自己指定它们

它将显示以下错误:

"_" refers to a UMD global, but the current file is a module.
Consider adding an import instead.
解决这个问题的一种方法是创建一个自定义的
.d.ts
文件,您可以将其称为
global.d.ts.
无所谓。将其放入TS项目并添加以下内容:

import * as _ from 'underscore';

declare global {
  const _:_.UnderscoreStatic;
}

现在,
下划线
应该在全球范围内可用,并且您还应该能够混合使用UMD+ES
导入
/
导出
语句

我使用的是TS 2.2.1,所有输入都在
节点模块/@types
中,但如果我从特定模块中删除上述任何导入,我仍然会出错。我想如果导入文件在任何文件中的位置,那么它们必须在所有文件中。在尝试删除所有模块之前,我想知道这一点,因为我有大量的模块。您应该在问题中添加错误。否则,很难猜测您遇到了什么问题,因为这还取决于您的TS配置。我使用的是TS 2.2.1,所有键入都在
节点模块/@types
中,但如果从特定模块中删除上述任何导入,我仍然会出错。我想如果导入文件在任何文件中的位置,那么它们必须在所有文件中。在尝试删除所有模块之前,我想知道这一点,因为我有大量的模块。您应该在问题中添加错误。否则,很难猜测您遇到了什么问题,因为这也取决于您的TS配置。