import 'reflect-metadata';
import { Container, Inject, Service } from 'typedi';
class InjectedExampleClass {
console.log('I am alive!');
class BetterInjectedClass {
console.log('I am a different class!');
inferredPropertyInjection: InjectedExampleClass;
* We tell TypeDI that initialize the `BetterInjectedClass` class
* regardless of what is the inferred type.
@Inject(() => BetterInjectedClass)
explicitPropertyInjection: InjectedExampleClass;
public inferredArgumentInjection: InjectedExampleClass,
* We tell TypeDI that initialize the `BetterInjectedClass` class
* regardless of what is the inferred type.
@Inject(() => BetterInjectedClass)
public explicitArgumentInjection: InjectedExampleClass
* The `instance` variable is an ExampleClass instance with both the
* - `inferredPropertyInjection` and `inferredArgumentInjection` property
* containing an `InjectedExampleClass` instance
* - `explicitPropertyInjection` and `explicitArgumentInjection` property
* containing a `BetterInjectedClass` instance.
const instance = Container.get(ExampleClass);
instance.inferredPropertyInjection.print();
// prints "I am alive!" (InjectedExampleClass.print function)
instance.explicitPropertyInjection.print();
// prints "I am a different class!" (BetterInjectedClass.print function)
instance.inferredArgumentInjection.print();
// prints "I am alive!" (InjectedExampleClass.print function)
instance.explicitArgumentInjection.print();
// prints "I am a different class!" (BetterInjectedClass.print function)