interface Role { m1(): boolean; m2(): number; } interface RoleConstructor { new (...params: Ts): Role } class Concretion implements Role { private readonly arg1: string constructor(arg1: string) { this.arg1 = arg1; } m1(): boolean { return true; } m2(): number { return 42; } } class RoleFromFile { private readonly RolePlayer: RoleConstructor<[arg1: string]>; constructor(RolePlayer: RoleConstructor<[string]>) { this.RolePlayer = RolePlayer; } build() { return new this.RolePlayer("test"); } } const roleFromFile = new RoleFromFile(Concretion) const test = roleFromFile.build(); console.log(test);