Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про TypeScript: any, never, type

В чём разница между any и never?

Этот вопрос проверяет понимание специальных типов TypeScript и их практического применения, особенно в контексте типобезопасности.

Короткий ответ

any представляет любой возможный тип и отключает проверку типов, а never представляет тип значений, которые никогда не occur (не возникают). any - это супертип всех типов, а never - это подтип всех типов. any означает "любой тип", а never - "никакой тип".

Длинный ответ

Разница между any и never

Эти два типа представляют противоположные концепции в системе типов TypeScript.

Тип any

any полностью отключает проверку типов:

typescript

let variable: any = "строка";
variable = 42;          // OK
variable = true;        // OK
variable = [1, 2, 3];   // OK

// Никаких проверок типов
variable.nonExistentMethod(); // Ошибка только в runtime

Когда использовать any:

  • При миграции с JavaScript

  • При работе с динамическими данными

  • Временно, когда тип неизвестен

Тип never

never представляет значения, которые никогда не возникают:

typescript

// Функция, которая всегда выбрасывает ошибку
function throwError(message: string): never {
  throw new Error(message);
}

// Функция с бесконечным циклом
function infiniteLoop(): never {
  while (true) {
    // ...
  }
}

// Проверка исчерпывающей полноты
type Shape = "circle" | "square";

function getArea(shape: Shape): number {
  switch (shape) {
    case "circle": return Math.PI;
    case "square": return 1;
    default: 
      const exhaustiveCheck: never = shape;
      return exhaustiveCheck;
  }
}

Ключевые различия

1. Совместимость типов

typescript

// any совместим с любым типом
let a: any;
let b: number = a;      // OK
let c: string = a;      // OK

// never совместим только с never
let n: never;
// let x: number = n;   // Ошибка!
// let y: string = n;   // Ошибка!
let z: never = n;       // OK

2. В объединениях и пересечениях

typescript

// В объединениях
type T1 = string | any;     // any
type T2 = string | never;   // string

// В пересечениях  
type T3 = string & any;     // any
type T4 = string & never;   // never

Практическое применение

1. Защита от необработанных случаев

typescript

type Action = "CREATE" | "UPDATE" | "DELETE";

function handleAction(action: Action) {
  switch (action) {
    case "CREATE": /* ... */ break;
    case "UPDATE": /* ... */ break;
    // case "DELETE": забыли обработать
    default:
      const unexpected: never = action;
      throw new Error(`Необработанное действие: ${unexpected}`);
  }
}

2. Фильтрация типов

typescript

// Удаляет null и undefined из типа
type NonNullable<T> = T extends null | undefined ? never : T;

type A = NonNullable<string | null>;        // string
type B = NonNullable<number | undefined>;   // number
type C = NonNullable<boolean | null | undefined>; // boolean

3. Обработка ошибок

typescript

function processData(data: string): string | never {
  if (!data) {
    throw new Error("Данные обязательны");
  }
  return data.toUpperCase();
}

const result = processData(""); // Выбрасывает ошибку - тип never

Когда использовать

Используйте any:

  • Для постепенной миграции с JavaScript

  • При работе со сторонними библиотеками без типов

  • Временно, когда тип сложно выразить

Используйте never:

  • Для функций, которые всегда выбрасывают исключения

  • Для обработки исчерпывающих проверок

  • В условных типах для фильтрации

Вывод: any отключает систему типов и должен использоваться минимально, тогда как never усиливает типобезопасность, описывая невозможные состояния и обеспечивая полноту проверок.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • TypeScript

    TypeScript

Ключевые слова

#any

#never

#type

Подпишись на React Developer в телеграм