TS TypeScript  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Перегрузки функций

Вопросы требуют читать код, сопоставлять статические гарантии с поведением JavaScript и выбирать решение, которое не рассыплется при развитии проекта.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. Код читайте построчно: часть заданий проверяет не результат JavaScript, а то, что TypeScript способен доказать до запуска.
Вопрос 1 из 20
Какие сигнатуры видит вызывающий код?
TypeScript
function parse(value: string): number;
function parse(value: number): string;
function parse(value: string | number): string | number {
  return typeof value === "string" ? Number(value) : String(value);
}
Вопрос 2 из 20
Почему вызов с union-переменной может быть отклонён?
TypeScript
function len(value: string): number;
function len(value: any[]): number;
function len(value: string | any[]) { return value.length; }
const input: string | any[] = Math.random() ? "x" : [];
len(input);
Вопрос 3 из 20
Какой порядок перегрузок уменьшает риск слишком раннего широкого совпадения?
TypeScript
function handle(value: "start"): 1;
function handle(value: string): number;
Вопрос 4 из 20
Что должна обещать реализационная сигнатура относительно перегрузок?
Вопрос 5 из 20
Почему десятки перегрузок могут стать проблемой?
Вопрос 6 из 20
Почему implementation должна принимать string | number?
TypeScript
function convert(value: string): number;
function convert(value: number): string;
function convert(value: string) {
  return Number(value);
}
Вопрос 7 из 20
Какая проверка нужна внутри реализации?
TypeScript
function pick(value: string): string;
function pick(value: string[]): string;
function pick(value: string | string[]) {
  // ...
}
Вопрос 8 из 20
Какой результат обязан вернуть каждый путь?
TypeScript
function get(id: number): { id: number };
function get(name: string): { name: string };
function get(value: number | string) {
  if (typeof value === "number") return { id: value };
  return { name: value };
}
Вопрос 9 из 20
Нужно ли делать implementation параметр any ради удобства?
Вопрос 10 из 20
Какая ошибка особенно опасна в перегруженной функции?
Вопрос 11 из 20
Какую перегрузку выберет вызов?
TypeScript
function route(path: "/users"): { users: string[] };
function route(path: string): unknown;
function route(path: string): unknown { return {}; }
const result = route("/users");
Вопрос 12 из 20
Почему слишком широкая первая перегрузка ухудшает тип результата?
TypeScript
function read(value: unknown): unknown;
function read(value: string): number;
function read(value: unknown) { return 0; }
const n = read("12");
Вопрос 13 из 20
Какой вызов не соответствует ни одной форме?
TypeScript
function create(name: string): { name: string };
function create(id: number, name: string): { id: number; name: string };
function create(a: string | number, b?: string) { return {}; }
Вопрос 14 из 20
Как проверить порядок перегрузок при обзоре API?
Вопрос 15 из 20
Когда overload для конкретного литерала оправдан?
Вопрос 16 из 20
Как можно заменить эти перегрузки одной сигнатурой?
TypeScript
function log(message: string): void;
function log(message: string, error: Error): void;
Вопрос 17 из 20
Когда union-параметр лучше двух перегрузок?
TypeScript
function length(value: string): number;
function length(value: unknown[]): number;
Вопрос 18 из 20
Как объект параметров упрощает растущее API?
TypeScript
// Было: request(url), request(url, timeout), request(url, timeout, retries)
Вопрос 19 из 20
Какой признак подсказывает использовать generic вместо перегрузок?
Вопрос 20 из 20
Как выбрать между перегрузками и union кортежей?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу