0Pricing
TypeScript Academy · Урок

Отказ от any; предпочтение unknown и сужения типов

Заменяйте any на unknown с последующим сужением типов; добавляйте небольшие защиты и функции-утверждения; постепенно включайте флаги строгости, не нарушая сборку.

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

Введение

Цель: устранить участки с произвольными типами. Предпочитайте неизвестный тип для ненадежных значений и сужайте его с помощью простых проверок. Вы добавите небольшие проверки и поэтапно включите строгие флаги.

  • произвольный тип → неизвестный тип
  • сужение с помощью typeof/in/instanceof
  • функции-утверждения

Проблемы произвольного типа

any отключает безопасность: значения неправильной формы или арифметика со строками проходят компиляцию, но приводят к сбоям позже.

// any hides bugs
function avgBad(values: any): number {
  // Compiles even if values is not an array of numbers
  return values.reduce((a: number, b: number) => a + b, 0) / values.length
}

// Runtime crash examples:
// avgBad(123)
// avgBad(["1","2"]) // string addition!

Неизвестный тип и сужение типов

Используйте unknown для данных, поступающих извне. Сужайте тип с помощью Array.isArray и typeof, а затем безопасно выполняйте вычисления.

// unknown forces checks
function avg(values: unknown): number {
  if (!Array.isArray(values)) throw new Error("values must be an array")
  const nums = values.filter((v): v is number => typeof v === "number")
  if (nums.length === 0) throw new Error("no numbers")
  const sum = nums.reduce((a, b) => a + b, 0)
  return sum / nums.length
}

// avg([1,2,3]) → 2; avg("oops") throws early with a clear message

Проверки типов

Создайте предикат x is T, чтобы корректно сужать тип в вызывающем коде. Делайте проверки небольшими и сосредоточенными на структурных признаках.

// Small predicate to reuse narrowing
export type User = { id: string; name: string }

export function isUser(x: unknown): x is User {
  return typeof x === "object" && x !== null
    && typeof (x as any).id === "string"
    && typeof (x as any).name === "string"
}

export function hello(x: unknown) {
  if (!isUser(x)) throw new Error("invalid user")
  return `Hello, ${x.name}`
}

Функции-утверждения

Функции-утверждения (asserts x is T) сужают тип после выполнения. Используйте их для обязательных предварительных условий и выбрасывайте исключения с понятными сообщениями.

// Assertion function throws or narrows
function assertUser(x: unknown): asserts x is { id: string; name: string } {
  if (typeof x !== "object" || x === null) throw new Error("not an object")
  const o = x as Record<string, unknown>
  if (typeof o.id !== "string" || typeof o.name !== "string") throw new Error("bad user")
}

export function greetUnsafe(x: unknown) {
  assertUser(x) // now x is narrowed after this call
  return `Hi ${x.name}`
}

План повышения строгости

План:

  • Включите noImplicitAny и сначала исправьте новые ошибки.
  • Добавьте проверки для внешних входных данных.
  • Включите strictNullChecks и явно обработайте значения undefined.
  • Отслеживайте оставшиеся случаи any с помощью ESLint и постепенно сокращайте их.

Проверка неизвестного и произвольного типов

Быстрая проверка: почему для ненадежных данных следует предпочитать unknown, а не any?

Итоги

Итоги: заменяйте any на unknown, добавляйте небольшие проверки или утверждения и поэтапно повышайте строгость, чтобы сборки оставались успешными.

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

Урок «Отказ от any; предпочтение unknown и сужения типов» бесплатный?

Да — полный текст урока «Отказ от any; предпочтение unknown и сужения типов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 2 уроков всего.

Чему я научусь в уроке «Отказ от any; предпочтение unknown и сужения типов»?

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

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

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

Сколько времени занимает урок «Отказ от any; предпочтение unknown и сужения типов»?

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

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

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

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

  1. Отказ от any; предпочтение unknown и сужения типов
  2. Постепенное включение строгих флагов
← Назад к TypeScript Academy