Чтобы мой код ниже работал, мне нужно либо повторить предложение require('./rolesService')
в rolesView.ts
, либо раскомментировать заявление console.log
. Если у меня нет ни одной из этих строк, веб-пакет не включает ссылочные ролиService.ts в комплекте, в результате чего отсутствует ошибка RolesServiceProvider. Я думаю, что знаю, почему, поскольку rs
не используется, кроме ссылок на типы, которые исчезают после пересылки на es5, поэтому веб-пакет должен оптимизировать импорт. Есть ли способ не повторять требование («./ roleService») дважды.Webpack с машинописным внешним модулем commonjs
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);
[Вот еще информация и более общее решение] (http://stackoverflow.com/a/35510979/441662), поэтому вам не нужно изменять каждый файл и импортировать инструкцию. –