¿Cómo puedo definir un servicio AngularJS usando una clase de TypeScript que no contamine el alcance global?

Estoy usando AngularJS y TypeScript. Quiero implementar un servicio AngularJS usando una clase Typescript, como esta:

class HelloService {
    public getWelcomeMessage():String {
        return "Hello";
    }
}

angular.module('app.services.helloService', []).factory('helloService', () => {
    return new HelloService();
});

Esto compila al siguiente código javascript:

var HelloService = (function () {
    function HelloService() {
    }
    HelloService.prototype.getWelcomeMessage = function () {
        return "Hello";
    };
    return HelloService;
})();

angular.module('app.services.helloService', []).factory('helloService', function () {
    return new HelloService();
});

Esto contamina el espacio de nombres global con la variable HelloService, que obviamente no quiero. (Usando la consola de Chrome, verifiqué que HelloService era un objeto). ¿Cómo puedo resolver / evitar este problema?

Intenté lo obvio:

angular.module('app.services.helloService', []).factory('helloService', function () {
    class HelloService { ...} 
    return new HelloService();
});

pero eso me da un error de compilación ("Token inesperado; 'declaración' esperada.").

Una posible solución que se me ocurre es usar la importación y exportación de TypeScript de alguna manera, que a su vez usará RequireJS. Esto probablemente envolverá el HelloService dentro de una función de definición, evitando así la contaminación del alcance global con HelloService. Sin embargo, no quiero usar RequireJS en mi aplicación AngularJS por ahora, ya que creo que AngularJS es lo suficientemente bueno para mi uso, y agrega complejidad.

Entonces, mi pregunta es, ¿cómo puedo definir un servicio AngularJS usando una clase de TypeScript que no contamine el alcance global?