版本什么是进口角嘲笑
typescript: 2.1.4
systemjs: 0.19.41
angular: 1.5.10
angular-mocks: 1.5.10
问题
我试图加载angular-mocks
与正确的方法打字稿2.0项目中的。
如果我使用以下它的作品,但我得到一个TS错误和{module}
也被标记为webstorm中的错误。
import {module} from 'angular-mocks';
describe('someClass', function() {
'use strict';
beforeEach(module('someModule'));
...
});
error TS2305: Module '"/node_modules/@types/angular-mocks/index"' has no exported member 'module'.
我最初试图简单地导入angular-mocks
,但进口angular
对象不具有mock
属性(即使window.angular.mock
定义),所以它抛出一个错误。
import * as angular from 'angular';
import 'angular-mocks';
describe('someClass', function() {
'use strict';
beforeEach(angular.mock.module('someModule'));
...
});
Uncaught TypeError: Cannot read property 'module' of undefined
Systemjs配置
System.config({
transpiler: 'typescript',
paths: {
'src:*': '/src/*',
'npm:*': '/node_modules/*'
},
map: {
'angular': 'npm:angular/angular.js',
'angular-mocks': 'npm:angular-mocks/angular-mocks.js',
'lib': 'src:lib',
'typescript': 'npm:typescript/lib/typescript.js',
'systemjs': 'npm:systemjs/dist/system.src.js'
},
packages: {
lib: {
defaultExtension: 'js'
}
},
meta: {
angular: {
format: 'global',
exports: 'angular'
},
'angular-mocks': {
format: 'global',
deps: ['angular']
}
}
});
问题
任何想法是正确的方法导入这是什么?
更新
这是我目前使用的解决方案,与mock
进口全角度对象正确地分配给它。
import * as angular 'angular-mocks';
describe('someClass', function() {
'use strict';
beforeEach(module('someModule'));
...
});
注意添加exports: 'angular'
到angular-mocks
元,以便它正确导入全角度对象:
System.config({
...
meta: {
angular: {
format: 'global',
exports: 'angular'
},
'angular-mocks': {
format: 'global',
exports: 'angular',
deps: ['angular']
}
}
}
这仍然产生了TS错误,但在这一点上是最短的之一,因此更容易从其他错误区分...
error TS2304: Cannot find name 'module'.
我觉得我一定是失去了一些东西。这不是和我的代码完全一样,除了'angular.mock.module'被一个胖箭头包裹的事实吗? – james
@詹姆斯是的,这是唯一的区别。这意味着问题不在'import'中,而是在你的** Systemjs config **中。根据你所说的('window.angular.mock'被定义并且你得到了'Uncaught TypeError:Can not read property'),在你的'beforeEach()'之前放置'debugger'语句并且比较'angular'和'window.angular' '未定义'模块')他们是不一样的。 –
我的意思不是粗鲁,但你没有告诉我任何事情,这在我的问题中还没有明确解释。你只是重复描述我试图解决的问题。 – james