Avatar ·

Разница между == и === в TypeScript

Всем привет! Подскажите, пожалуйста, новичку в TypeScript: в чем принципиальная разница между операторами == и ===? Я читал, что в JavaScript первый делает приведение типов, а второй — строгое сравнение, но в TypeScript, насколько я понимаю, типы уже строго контролируются компилятором.

Вот пример, который меня смущает:

const a: number = 5;
const b: string = "5";

if (a == b) {
  console.log("Равно с ==");
}

if (a === b) {
  console.log("Равно с ===");
}

Первый if выводит сообщение, второй — нет. Я ожидал, что TypeScript не даст мне даже сравнивать number и string без явного приведения, но код компилируется. Почему так происходит? Разве TypeScript не должен выдавать ошибку на a == b? Или это особенность работы строгой типизации только на уровне компиляции, а в рантайме все равно используется JS-логика?

Пробовал включать strict: true в tsconfig.json — поведение не изменилось. Может, есть какой-то флаг, который запрещает нестрогие сравнения? Буду благодарен за развернутое объяснение и ссылки на документацию.