TypeScript Academy · Урок

Сужение типов с помощью typeof и проверки истинности

Используйте проверки typeof для сужения примитивных типов

Урок 1 из 413 шагов

«Сужение типов с помощью typeof и проверки истинности» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Добро пожаловать

TypeScript сужает объединения типов внутри условных блоков. Проверки `typeof` и истинности — самые распространённые методы сужения.

Сужение с помощью typeof

Используйте `typeof` для проверки примитивных типов. TypeScript понимает проверки typeof и сужает тип внутри блока.
function process(val: string | number) {
  if (typeof val === 'string') {
    return val.toUpperCase(); // val: string
  }
  return val.toFixed(2); // val: number
}

Возвращаемые значения typeof

typeof возвращает 'string', 'number', 'boolean', 'bigint', 'symbol', 'undefined', 'object' или 'function'. Обратите внимание: typeof null === 'object' — особенность JavaScript.
typeof 'hello'    // 'string'
typeof 42         // 'number'
typeof true       // 'boolean'
typeof null       // 'object' (quirk!)
typeof undefined  // 'undefined'

Сужение по истинности

Значения JavaScript бывают истинными или ложными. TypeScript сужает `T | null | undefined` до `T` внутри проверки истинности.
function greet(name: string | null) {
  if (name) {
    console.log('Hello, ' + name); // name: string
  } else {
    console.log('Hello, stranger');
  }
}

Ложные значения

Ложные значения в JavaScript: false, 0, '', null, undefined, 0n, NaN. Сужение по истинности исключает их из типа, если проверка пройдена.

Сужение с приведением к логическому типу

Использование `Boolean(val)` или `!!val` также исключает null и undefined при сужении.
const items: (string | null)[] = ['a', null, 'b', null];
const strings = items.filter((x): x is string => x !== null);

Отрицательные условия

TypeScript также выполняет сужение в ветвях else и после досрочных возвратов.
function getLength(val: string | null): number {
  if (!val) return 0; // early return narrows
  return val.length;  // val: string here
}

Сочетание typeof с проверкой равенства

Строгое равенство (===) в сочетании с typeof обеспечивает точное сужение.
function accept(x: string | number | boolean) {
  if (typeof x === 'string' || typeof x === 'number') {
    console.log(x); // x: string | number
  }
}

typeof не может сузить тип до null

Чтобы сузить тип до null, используйте строгое равенство `=== null`. Проверка истинности не позволяет отличить null от других ложных значений.
function check(x: string | null | 0) {
  if (x === null) { /* x: null */ }
  else if (x === 0) { /* x: 0 */ }
  else { /* x: string */ }
}

Сужение в циклах

TypeScript применяет сужение и внутри тел циклов, а не только в операторах if.

Анализ потока управления

TypeScript отслеживает тип в каждой точке вашего кода с помощью анализа потока управления. Присваивания также обновляют тип.
let x: string | number = 'hello';
// x: string
x = 42;
// x: number

Быстрая проверка

Каков тип `val` внутри `if (typeof val === 'string')`, если изначально он имел тип `string | number`?

Повторение

Проверки typeof и условия истинности сужают объединения типов в TypeScript. TypeScript использует анализ потока управления для отслеживания типов в каждой точке. Используйте строгое равенство для проверок null и undefined.
Можно начать бесплатно

Изучай TypeScript с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
101
Уроки
352

Часто задаваемые вопросы

Урок «Сужение типов с помощью typeof и проверки истинности» бесплатный?

Да — полный текст урока «Сужение типов с помощью typeof и проверки истинности» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Сужение типов с помощью typeof и проверки истинности»?

Используйте проверки typeof для сужения примитивных типов Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Сужение типов с помощью typeof и проверки истинности»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Сужение типов с помощью typeof и проверки истинности
  2. Сужение типов с помощью instanceof и in
  3. Пользовательские функции проверки типов
  4. Проверка полноты с помощью never
← Назад к TypeScript Academy