Skip to content

Instantly share code, notes, and snippets.

@DScheglov
Created October 21, 2020 06:07
Show Gist options
  • Save DScheglov/c9eee7404e303ba3cbf2aadb6de76288 to your computer and use it in GitHub Desktop.
Save DScheglov/c9eee7404e303ba3cbf2aadb6de76288 to your computer and use it in GitHub Desktop.
import { multiple } from "true-di";
export const asValue = <T>(value: T) => <C>(dependencies: C) => value;
export const asFactory = <D, T>(factory: (dependencies: D) => T) => factory;
asFactory.multi = multiple;
type ClassConstructor<D extends {}, T> = {
new (dependencies: D): T
};
export const asClass = <D extends {}, T>(constructor: ClassConstructor<D, T>) =>
<C extends D = D>(container: C) => new constructor(container);
asClass.multi = <D extends {}, T>(contructor: ClassConstructor<D, T>) =>
multiple(asClass(contructor));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment