为了让我的代码能够正常工作,我需要重复require('./rolesService')
中的rolesView.ts
子句,或取消注释console.log
语句。如果我没有这些行,webpack不会在bundle中包含引用的rolesService.ts,从而导致缺少RolesServiceProvider错误。我想我知道为什么,因为rs
并没有真正使用,除了类型引用一旦被转换为es5就消失了,所以webpack必须优化导入。有没有办法不必重复两次require('./ rolesService')。
rolesView.ts:
"use strict";
import angular = require('angular');
import rs = require('./rolesService');
require('./rolesService');
//console.log( rs);
class RolesViewController {
static $inject = ['RolesService']
constructor(private rolesService: rs.IRolesService) {
rolesService.getRoles();
}
}
angular.module('epsr').component('rolesView', {
template: require('./rolesView.html'),
controller: RolesViewController
});
rolesService.ts:
'use strict';
import angular = require('angular');
export interface IRole {
id: string;
name: string;
}
export interface IRolesService {
getRoles(): ng.IPromise<IRole[]>;
}
class RolesService implements RolesService {
static $inject = ['$http'];
constructor(private $http: ng.IHttpService) {
}
getRoles(): ng.IPromise<IRole[]> {
return this.$http.get('api/roles');
}
}
angular.module('epsr').service('RolesService', RolesService);
答案 0 :(得分:3)
我想我知道为什么,因为rs并没有真正使用,除了类型引用一旦被转换为es5就会消失,所以webpack必须优化导入。
你是对的。如果仅使用类型信息,则TypeScript将删除导入。
可用的&#34;修复&#34;是:
require('./rolesService');
rs;
FWIW,Angular2似乎用实际使用导入的@Inject指令来解决这个问题。