Модуль 13 · Урок 49

TypeScript compiler model, inference і strict config

TypeScript перевіряє JavaScript contracts до запуску, але типи стираються з emitted code. Compile-time success не валідовує external JSON і не гарантує runtime behavior.

InferenceAnnotationsstrictType erasure

Де тип потрібний

const title = 'BookFlow'; // inferred string
function summarize(books: readonly Book[]): string {
  return `Книг: ${books.length}`;
}

Inference достатня для очевидного local initializer і contextual callback. Annotation корисна на parameter/return/public boundary. Використовуйте lowercase primitives, T[]/Array<T>, tuple лише для fixed positions; не перетворюйте кожне local value на verbose annotation.

Strict project contract

OptionEvidence
strictFamily строгих checks
noImplicitAnyНевідомий parameter не стає silent any
strictNullChecksnull/undefined мають власні types
target/moduleRuntime і module output contract

Фіксуйте TypeScript/Node versions і clean check/build. Diagnostic має code, source line, cause, fix і retest; assertion не є виправленням лише тому, що прибрала red underline.

Практика

Заповніть inference/annotation register і compiler diagnostics; виконайте strict check/build, потім запустіть emitted JS як окремий runtime gate.

Офіційні джерела

Практична перевірка · урок 49 з 60

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Що робить TypeScript?
2. Чи залишаються type annotations у emitted JS?
3. Коли inference достатня?