在“模块”全局变量上运行 grunt-typescript 时,angular-mock 和 node.js 发生冲突
Posted
技术标签:
【中文标题】在“模块”全局变量上运行 grunt-typescript 时,angular-mock 和 node.js 发生冲突【英文标题】:angular-mock and node.js conflicting when running grunt-typescript on the "module" global variable 【发布时间】:2014-03-22 00:02:30 【问题描述】:我正在使用 grunt-typescript,它正在编译我所有的 *.ts 文件。我同时使用了 angular-mocks.d.ts 和 node.d.ts,但是我在我的实际 ts 文件中分别引用它们。我仅将 angular-mocks 用于茉莉花测试,并且在 server.ts 文件中使用节点。问题我遇到的是,即使它们被引用单独地,当它们在 grunt-typescript 中编译时,似乎以某种方式将它们转储在一起,以便它们对“模块”的两个不同定义最终发生冲突。如果我使用 tsc(它引用 node.d.ts)自己构建我的 server.ts 文件,它构建得很好。这两者实际上不应该重合,所以对我来说不是真的冲突,除了它正在成为 grunt-typescript 中的一个,它似乎在编译时将所有 *.d.ts 文件一起转储。我认为这是因为它将我所有的 *.ts 文件构建在一起,因此最终将 *.d.ts 文件一起拉到一个公共空间中。
我得到的错误:
c:/node/bills/typings/node/node.d.ts(37,13): 错误 TS2134:后续变量声明必须具有相同的类型。变量 'module' 必须是 '(...modules: any[]) => any' 类型,但这里有类型 ' exports: any;要求(id:字符串):任何; id:字符串;文件名:字符串;加载:布尔值;父母:任何;孩子:任何[]; '。
angular-mocks.d.ts “模块”定义:
declare var module: (...modules: any[]) => any;
node.d.ts “模块”定义:
declare var module:
exports: any;
require(id: string): any;
id: string;
filename: string;
loaded: boolean;
parent: any;
children: any[];
【问题讨论】:
【参考方案1】:这最终对我有用。我将我的测试 .ts 文件拆分为单独的打字稿运行。这导致它不能同时运行我的测试声明和运行时声明。将它们分开后,模块环境声明不再冲突。
typescript:
options:
target: 'es5', //or es3
base_path: '',
sourcemap: true,
declaration: false
,
server:
src: ['*.ts']
,
test:
src: ['test/*.ts']
,
watch:
files: ['*.ts', 'test/*.ts'],
tasks: ['typescript:server', 'typescript:test']
【讨论】:
【参考方案2】:这是一个已知问题!
它已成为pull request/merge ..
解决方法是使用angular.mock.module
而不是module
。
【讨论】:
不仅仅是一种解决方法! angular-mocks 的类型定义建议您始终使用angular.mock.module
。以上是关于在“模块”全局变量上运行 grunt-typescript 时,angular-mock 和 node.js 发生冲突的主要内容,如果未能解决你的问题,请参考以下文章