Давайте уменьшим шрифт до кусочков меньшего размера, которые легче понять, а затем вернемся к полноте.
Сначала давайте отбросим new
из нашего ума и сосредоточимся на последнем.часть определения:
(...args: any[]) => any
Теперь давайте забудем об аргументах:
() => any
Надеюсь, это знакомо как функция, которая возвращает тип any
.
Далее мы можем добавить обратно в аргументы:
(...args: any[]) => any
...args: any[]
использует конструкцию Rest Parameters, которая, по сути, говорит, что может быть любое количество параметров предоставленного типа any
.Поскольку существует неизвестное количество any
параметров, тип аргумента представляет собой массив any
.
Поэтому, надеюсь, теперь имеет смысл, что это функция, которая принимает любое количество аргументов (извведите any
) и возвращает тип any
.
Наконец, мы можем добавить обратно ключевое слово new
, чтобы получить:
new (...args: any[]) => any
Ключевое слово new
здесь указывает, что эту функцию можно рассматривать как функцию конструктора класса и вызывать с ключевым словом new
.
Это дает нам полное представление о том, что функция является функциейкоторый принимает любое количество аргументов (типа any
), которое возвращает тип any
и может использоваться в качестве функции конструктора с ключевым словом new
.
Когда берется в контекстеAPI, по сути, позволяет передавать любой конструктор класса в функцию.