Начиная с Базового примера в typescript-rest
, я хотел модульно разделить класс HelloService
на его собственный файл.Вот так:
// hello-service.ts
import { Path, GET, PathParam } from "typescript-rest";
@Path("/hello")
export class HelloService {
@Path(":name")
@GET
sayHello( @PathParam('name') name: string): string {
return "Hello " + name;
}
}
// index.ts
import * as express from "express";
import { Server } from "typescript-rest";
import './hello-service' // this works
// the following don't work
// import { HelloService } from './hello-service';
// import * as Foo from './hello-service'
// however they do work, but iif:
// new HelloService()
// new Foo.HelloService()
let app: express.Application = express();
Server.buildServices(app);
app.listen(3000, function() {
console.log('Rest Server listening on port 3000!');
});
Короче говоря, я ожидал, что 3 оператора импорта:
import './hello-service'
import { HelloService } from './hello-service';
import * as Foo from './hello-service'
будут эквивалентны с точки зрения побочных эффектов.Моя первоначальная интерпретация заключалась в том, что файл загружается и интерпретируется, и поэтому @decorators
делают свое волшебство (я не знаю, как они работают под капотом), но, очевидно, нет.
Может кто-то указать на разницу междуэти утверждения и объясняют различные результаты?
Вот документация по модулям и разрешению модуля
редактировать : Я знаю, что также возможно явно зарегистрировать службы с этой библиотекой, но это не то, что меня интересует.