TS TypeScript  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Типы DOM и браузерных API

Профессиональный тест по теме «Типы DOM и браузерных API»: сложные фрагменты кода, архитектурные компромиссы, диагностика и надёжность. Вопросы требуют читать код, сопоставлять статические гарантии с поведением JavaScript и выбирать решение, которое не рассыплется при развитии проекта.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. Код читайте построчно: часть заданий проверяет не результат JavaScript, а то, что TypeScript способен доказать до запуска.
Вопрос 1 из 30
Какой тип возвращает querySelector без конкретного generic?
TypeScript
const node = document.querySelector(".save");
Вопрос 2 из 30
Как безопасно получить value текстового поля?
TypeScript
const node = document.querySelector("#name");
Вопрос 3 из 30
Что даёт generic querySelector<HTMLButtonElement>?
TypeScript
const button = document.querySelector<HTMLButtonElement>("button.save");
Вопрос 4 из 30
Когда document.getElementById удобнее querySelector?
Вопрос 5 из 30
Почему helper requireElement может быть полезен?
Вопрос 6 из 30
Почему event.target неудобен для чтения value?
TypeScript
input.addEventListener("input", event => {
  event.target.value;
});
Вопрос 7 из 30
Какой объект гарантированно является элементом, на котором зарегистрирован обработчик?
TypeScript
button.addEventListener("click", event => {
  // ...
});
Вопрос 8 из 30
Как сузить target при делегировании списка?
TypeScript
list.addEventListener("click", event => {
  const target = event.target;
  // ...
});
Вопрос 9 из 30
Почему тип события лучше выводить из addEventListener, чем писать Event вручную?
Вопрос 10 из 30
Что важно при асинхронном использовании currentTarget?
Вопрос 11 из 30
Почему fetch не отклоняет Promise на HTTP 404?
TypeScript
const response = await fetch("/user/404");
Вопрос 12 из 30
Какой тип следует считать у response.json до схемы?
TypeScript
const body = await response.json();
Вопрос 13 из 30
Что произойдёт при повторном чтении body?
TypeScript
const text = await response.text();
const json = await response.json();
Вопрос 14 из 30
Как типизировать обёртку request<T>(), которая просто делает as T после json?
Вопрос 15 из 30
Как моделировать отмену запроса?
Вопрос 16 из 30
Почему non-null assertion здесь хрупок?
TypeScript
const root = document.querySelector("#app")!;
root.replaceChildren(view);
Вопрос 17 из 30
Какой эффект у optional chaining?
TypeScript
document.querySelector(".notice")?.remove();
Вопрос 18 из 30
Почему checked нельзя читать у HTMLElement?
TypeScript
const box: HTMLElement = document.getElementById("terms")!;
box.checked;
Вопрос 19 из 30
Когда optional chaining на DOM-элементе ухудшает диагностику?
Вопрос 20 из 30
Как не повторять проверки одного обязательного элемента по всему коду?
Вопрос 21 из 30
Какую гарантию должен удерживать тест helper-функции requireElement?
TypeScript
function requireElement(selector: string): HTMLElement {
  const node = document.querySelector(selector);
  if (!(node instanceof HTMLElement)) throw new Error(`Missing ${selector}`);
  return node;
}
Вопрос 22 из 30
Какой отрицательный пример проверяет тип события для input?
TypeScript
declare const input: HTMLInputElement;
Вопрос 23 из 30
Почему тип querySelector<HTMLButtonElement> не заменяет runtime-проверку?
TypeScript
const button = document.querySelector<HTMLButtonElement>("#save");
Вопрос 24 из 30
После рефакторинга helper стал возвращать Element вместо HTMLInputElement. Что заметит потерю полезной гарантии?
Вопрос 25 из 30
Какой набор тестов нужен для делегированного обработчика списка?
Вопрос 26 из 30
Какой публичный контракт компонента меньше зависит от конкретной разметки?
TypeScript
export interface SearchPanel {
  focusSearch(): void;
  setQuery(value: string): void;
}
Вопрос 27 из 30
Что здесь является утечкой внутреннего устройства виджета?
TypeScript
export interface DialogController {
  root: HTMLDivElement;
  resizeObserver: ResizeObserver;
  open(): void;
  close(): void;
}
Вопрос 28 из 30
Fetch-метод начинает поддерживать отмену и таймаут. Какой контракт проще расширять?
TypeScript
interface LoadOptions { signal?: AbortSignal; timeoutMs?: number; }
declare function loadUser(id: string, options?: LoadOptions): Promise<LoadResult>;
Вопрос 29 из 30
Как проверить браузерную совместимость опубликованного DOM-helper?
Вопрос 30 из 30
Какой симптом показывает, что nullable DOM-состояние скрыто слишком агрессивно?

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

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

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

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