title: How nestjs works and runs constructors with parameter
body: <p>I'm new at nestJS and also can't find too much information about it so I also afraid to dive into source code it (also a beginner in typescript). I really wanna know how those stuffs work which I'll mention below</p>
  
  <p>First:
  I'm watching the tutorial where we have service called Task</p>
  
  <pre class="lang-js prettyprint-override"><code>export class TasksController {
    constructor(private readonly tasksService: TasksService) { }
  
    Get()
    index() {
       this.tasksService.all();
    }
  }
  </code></pre>
  
  <p>Here <code>TasksService</code> used as just a type, not as a class I guess. In normal typescript, I would write something like that</p>
  
  <p><code>let task = new TasksController(new TasksService())</code></p>
  
  <p>Then I would be able to call <code>this.tasksService.all();</code></p>
  
  <p>Second:
  How <code>@Injectable()</code>, <code>@Inject()</code>, <code>@InjectRepository()</code> etc works. Original docs are bit confusing :(</p>