版本什麼是進口角嘲笑
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