Побочные эффекты в операциях импорта - PullRequest
0 голосов
/ 27 февраля 2019

Начиная с Базового примера в 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 делают свое волшебство (я не знаю, как они работают под капотом), но, очевидно, нет.

Может кто-то указать на разницу междуэти утверждения и объясняют различные результаты?


Вот документация по модулям и разрешению модуля

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

...