Выбор ответа Middle Классы и интерфейсы обновлено

Тип конструктора класса

Вопрос

Какой тип параметра C позволит вызвать new C() внутри функции?

class User {
  name = 'Аня';
}
function create(C: /* ? */) {
  return new C();
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: typeof User. Имя класса в позиции типа означает тип экземпляра: User это объект с полями пользователя, и new на нём вызвать нельзя.

Варианты ответа

  1. InstanceType<User>
  2. User[]
  3. User
  4. typeof Userправильный ответ

Разбор

Имя класса в позиции типа означает тип экземпляра: User это объект с полями пользователя, и new на нём вызвать нельзя. Тип самого класса, то есть конструктора со статическими членами, это typeof User. Обобщённо пишут new (...args: any[]) => T.

InstanceType принимает тип конструктора и возвращает экземпляр, обратная операция, и InstanceType<User> даже не скомпилируется. User[] массив экземпляров.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.