2016-01-07 2 views
2

Чтобы мой код ниже работал, мне нужно либо повторить предложение 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); 

ответ

3

Я думаю, я знаю, почему, так как RS на самом деле не используется для ссылок типа за исключением того, исчезают после пересылки на es5, поэтому веб-пакет должен оптимизировать импорт.

Вы верны. Если используется только информация типа, то TypeScript будет лишать импорт.

доступных "исправления" являются:

  1. Что у вас есть: require('./rolesService');
  2. "Использование" импорт: rs;

FWIW, Angular2, кажется, решить эту проблему с помощью директивы @Inject который фактически использует импорт.

+0

[Вот еще информация и более общее решение] (http://stackoverflow.com/a/35510979/441662), поэтому вам не нужно изменять каждый файл и импортировать инструкцию. –

Смежные вопросы