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

Типизация внешних библиотек

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. Код читайте построчно: часть заданий проверяет не результат JavaScript, а то, что TypeScript способен доказать до запуска.
Вопрос 1 из 30
В каком порядке разумно искать типы установленной библиотеки?
TypeScript
import { parse } from "legacy-parser";
Вопрос 2 из 30
Почему переход к определению полезен при расследовании странного типа?
TypeScript
const value = library.parse(input);
Вопрос 3 из 30
Что поможет понять путь разрешения типов пакета?
TypeScript
tsc --traceResolution
Вопрос 4 из 30
У пакета есть index.d.ts, но редактор всё равно сообщает implicit any. Что проверить первым?
Вопрос 5 из 30
Как проверить качество сторонних типов до широкого внедрения пакета?
Вопрос 6 из 30
Когда нужен пакет @types/name?
TypeScript
npm install -D @types/name
Вопрос 7 из 30
Какой риск у несовпадающих major-версий runtime-пакета и @types?
TypeScript
"legacy-lib": "2.x",
"@types/legacy-lib": "4.x"
Вопрос 8 из 30
Почему @types иногда должен быть production dependency?
TypeScript
// Публичный d.ts пакета содержит:
import type { ExternalType } from "external-lib";
Вопрос 9 из 30
Куда поместить @types/node для приложения, не публикующего собственные declarations?
Вопрос 10 из 30
Как избежать случайного подключения всех глобальных @types?
Вопрос 11 из 30
Что делает module augmentation?
TypeScript
declare module "http-client" {
  interface RequestOptions {
    traceId?: string;
  }
}
Вопрос 12 из 30
Почему нельзя расширить default export по имени через обычное слияние?
TypeScript
// У default export может не быть экспортируемого имени,
// которое доступно для augmentation.
Вопрос 13 из 30
Как связать расширение Request с runtime-установкой поля user?
TypeScript
declare module "framework" {
  interface Request { user?: AuthUser }
}
Вопрос 14 из 30
Когда augmentation хуже адаптера?
Вопрос 15 из 30
Как проверить, что augmentation загрузилась?
Вопрос 16 из 30
Документация обещает Promise<Result>, а типы возвращают Result. Что делать сначала?
TypeScript
const result = client.load();
Вопрос 17 из 30
Чем опасно локальное as unknown as CorrectType?
TypeScript
const value = libraryCall() as unknown as CorrectType;
Вопрос 18 из 30
Как временно исправить неверную сигнатуру, не форкая весь пакет?
TypeScript
declare module "legacy-lib" {
  interface Client {
    load(id: string): Promise<Result>;
  }
}
Вопрос 19 из 30
Когда стоит отправить исправление в upstream?
Вопрос 20 из 30
Как сопровождать локальный патч внешних типов?
Вопрос 21 из 30
Что должен подтвердить типовой тест обёртки над внешним parser?
TypeScript
declare const externalParser: { parse(input: string): unknown };
declare function decodeResult(value: unknown): DomainResult;
export function parseDomain(input: string): DomainResult {
  return decodeResult(externalParser.parse(input));
}
Вопрос 22 из 30
Какой отрицательный пример полезен после установки @types/legacy-lib?
TypeScript
import { parse } from "legacy-lib";
// @ts-expect-error — streamParse отсутствует в используемой версии
import { streamParse } from "legacy-lib";
Вопрос 23 из 30
Почему успешная компиляция с @types не доказывает совместимость с установленной библиотекой?
TypeScript
import { parse } from "legacy-lib";
const result = parse("data");
// Установленные JavaScript и @types выпущены разными версиями.
Вопрос 24 из 30
После module augmentation новая версия пакета уже объявила то же свойство с другим типом. Что должно поймать конфликт?
TypeScript
declare module "external-client" {
  interface ClientOptions { retry?: number }
}
// В новой версии пакет объявил retry как объект политики.
Вопрос 25 из 30
Какой набор проверок нужен для типизации внешней библиотеки без официальных типов?
Вопрос 26 из 30
Какой публичный слой уменьшает зависимость проекта от типов внешнего клиента?
TypeScript
export interface ImageResizer {
  resize(input: Uint8Array, options: ResizeOptions): Promise<Uint8Array>;
}
Вопрос 27 из 30
Что в этом публичном типе создаёт хрупкую зависимость?
TypeScript
export type PublicDependency =
  typeof import("large-lib/dist/internal/client");
Вопрос 28 из 30
Внешняя библиотека теперь может не поддерживаться на текущей платформе. Как лучше выразить это в адаптере?
Вопрос 29 из 30
Как проверить обновление внешней зависимости перед выпуском?
Вопрос 30 из 30
Какой признак показывает, что внешние типы слишком глубоко проникли в проект?

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

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

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

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