Site logo

Developer Blog

Pavel Koltyshev

Ошибка TypeScript "This expression is not constructable"

Иногда в TypeScript можно словить ошибку “This expression is not constructable”, например:

class Foo {}

function factory<T>(cls: T): T {
  return new cls(); // This expression is not constructable.
}

const foo = factory(Foo);

Смысл этой ошибки в том что TypeScript не может распознать, что мы передаем в качестве аргумента функцию-конструктор. Можно явно указать, что передаваемое нами значение является функцией-конструктором.

class Foo {}

type Constructable<T = any> = new (...args: any[]) => T;

function factory<T>(cls: Constructable<T>): T {
  return new cls();
}

const foo = factory(Foo);