TS TypeScript  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Строгий режим и null-безопасность

Разбирает тему «Строгий режим и null-безопасность» на практических сценариях: поиск дефектов, сравнение решений и оценка последствий. Вопросы требуют читать код, сопоставлять статические гарантии с поведением JavaScript и выбирать решение, которое не рассыплется при развитии проекта.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. Код читайте построчно: часть заданий проверяет не результат JavaScript, а то, что TypeScript способен доказать до запуска.
Вопрос 1 из 25
Что включает флаг strict в целом?
TypeScript
// tsconfig.json
{
  "compilerOptions": { "strict": true }
}
Вопрос 2 из 25
Как strict влияет на неаннотированный параметр?
TypeScript
function greet(name) {
  return name.toUpperCase();
}
Вопрос 3 из 25
Почему useUnknownInCatchVariables полезен?
TypeScript
try {
  risky();
} catch (error) {
  console.log(error.message);
}
Вопрос 4 из 25
Как безопаснее включать strict в старом проекте?
Вопрос 5 из 25
Почему strict — не гарантия отсутствия runtime-ошибок?
Вопрос 6 из 25
В показанном фрагменте какой тип имеет name?
TypeScript
function read(user: { name?: string }) {
  const name = user.name;
  return name;
}
Вопрос 7 из 25
В показанном фрагменте почему вызов запрещён?
TypeScript
function upper(value: string) {
  return value.toUpperCase();
}
const input: string | null = null;
upper(input);
Вопрос 8 из 25
В показанном фрагменте какой результат у find?
TypeScript
const users = [{ id: "a" }, { id: "b" }];
const user = users.find(item => item.id === "c");
Вопрос 9 из 25
Когда non-null assertion ! оправдан?
Вопрос 10 из 25
Чем null отличается от undefined в контракте?
Вопрос 11 из 25
Что вернёт выражение для count = 0?
TypeScript
const count: number | undefined = 0;
const a = count || 10;
const b = count ?? 10;
Вопрос 12 из 25
В показанном фрагменте каков тип result?
TypeScript
type User = { profile?: { name?: string } };
declare const user: User;
const result = user.profile?.name?.toUpperCase();
Вопрос 13 из 25
Что делает optional call?
TypeScript
type Hooks = { onReady?: () => void };
declare const hooks: Hooks;
hooks.onReady?.();
Вопрос 14 из 25
Почему длинная цепочка ?. может скрывать проблему?
Вопрос 15 из 25
Как выбрать между || и ?? для значения по умолчанию?
Вопрос 16 из 25
Почему strictPropertyInitialization выдаёт ошибку?
TypeScript
class User {
  name: string;
  constructor(load: boolean) {
    if (load) this.name = "Ada";
  }
}
Вопрос 17 из 25
Что означает definite assignment assertion?
TypeScript
class Controller {
  element!: HTMLElement;
}
Вопрос 18 из 25
Какой контракт лучше для ленивого ресурса?
TypeScript
class Service {
  private connection?: Connection;
  getConnection() {
    return this.connection ??= createConnection();
  }
}
Вопрос 19 из 25
Когда поле лучше сделать optional, а не использовать !?
Вопрос 20 из 25
Как проверить инициализацию, выполняемую фреймворком после конструктора?
Вопрос 21 из 25
Какой тип результата нужно зафиксировать при включённом noUncheckedIndexedAccess?
TypeScript
type Users = Record<string, User>;
declare const users: Users;
const current = users["u1"];
Вопрос 22 из 25
Какой вызов должен быть запрещён при exactOptionalPropertyTypes?
TypeScript
type Profile = { nickname?: string };
declare function save(profile: Profile): void;
Вопрос 23 из 25
Почему runtime-тест остаётся нужен после сужения unknown до объекта с полем name?
Вопрос 24 из 25
После удаления оператора ! код продолжил компилироваться из-за нового значения по умолчанию. Что проверить?
Вопрос 25 из 25
Как проверить ленивую инициализацию поля без definite assignment assertion?

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

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

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

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