← Назад к вопросам

Какие знаешь операторы которые возвращают тип аргумент?

1.0 Junior🔥 171 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Операторы TypeScript, возвращающие тип аргумента

В TypeScript существует несколько ключевых операторов и конструкций, которые позволяют работать с типами на уровне системы типов и возвращать тип, основанный на переданных аргументах или выражениях. Они являются фундаментальными инструментами для выведения типов (type inference) и создания гибких, переиспользуемых типов.

1. typeof оператор для типов (Type Query)

Этот оператор возвращает тип переменной или свойства. Он не работает во время выполнения, а используется исключительно в контексте системы типов TypeScript.

const user = { name: 'Alice', age: 30 };
type UserType = typeof user;
// UserType = { name: string; age: number }

function greet(person: UserType) {
  console.log(`Hello, ${person.name}`);
}

Здесь typeof user возвращает тип объекта user{ name: string; age: number }. Это мощный способ избежать дублирования описаний типов.

2. keyof оператор

Оператор keyof возвращает объединение литеральных строковых типов (union of string literal types) всех ключей переданного ему типа. По сути, он "извлекает" ключи типа-аргумента.

interface Product {
  id: number;
  name: string;
  price: number;
}

type ProductKeys = keyof Product;
// ProductKeys = "id" | "name" | "price"

function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}

В этом примере keyof Product возвращает тип, являющийся объединением всех ключей интерфейса Product. Это критически важно для создания типобезопасных функций доступа к свойствам.

3. Индексированные типы доступа (Indexed Access Types)

Позволяют получить тип свойства по его ключу. Фактически, они "запрашивают" тип у аргумента-типа.

type ProductNameType = Product['name'];
// ProductNameType = string

type ProductValueTypes = Product[keyof Product];
// ProductValueTypes = number | string

Здесь Product['name'] возвращает тип свойства name интерфейса Product. Конструкция Product[keyof Product] возвращает объединение типов всех возможных значений объекта типа Product.

4. Условные типы (Conditional Types) с infer

Условные типы позволяют выразить логику "если-то" на уровне типов. Ключевое слово infer используется внутри них для выведения (inference) и возврата типа из другого типа-аргумента.

// Классический пример: получение типа элемента массива
type ArrayElementType<T> = T extends (infer U)[] ? U : never;

type NumArray = number[];
type Element = ArrayElementType<NumArray>; // Element = number

// Пример: получение типа возвращаемого значения функции
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;

function foo(): string {
  return 'test';
}
type FooReturn = ReturnType<typeof foo>; // FooReturn = string

В первом случае ArrayElementType<NumArray> анализирует тип-аргумент NumArray (который number[]) и с помощью infer U выводит и возвращает тип элемента массива — number.

5. Параметры типа в дженериках (Generic Type Parameters)

Хотя это не отдельный оператор, обобщенные типы (generics) — это механизм, который по своей сути принимает типы-аргументы и возвращает новый тип на их основе.

// Объявление типа, который "возвращает" тип, основанный на аргументе
type Nullable<T> = T | null;
type StringOrNull = Nullable<string>; // string | null

// Функция, тип результата которой зависит от типа аргумента
function identity<T>(value: T): T {
  return value;
}
const result = identity(42); // result имеет тип number

Здесь Nullable<T> — это тип, который принимает тип T в качестве аргумента и возвращает новый тип — объединение T и null.

Практическое значение

Эти операторы образуют основу для продвинутого манипулирования типами в TypeScript. Их совместное использование позволяет создавать мощные абстракции:

  • ReturnType и Parameters — встроенные утилитарные типы, построенные на infer.
  • Сопоставленные типы (Mapped Types) — часто используют keyof для итерации по ключам.
  • Обеспечение типобезопасности в API — например, функция getProperty, которая никогда не позволит обратиться к несуществующему ключу.

Таким образом, главными "операторами, возвращающими тип аргумента", являются typeof (для значений), keyof (для ключей типа), индексированный доступ T[K] и механизм выведения infer в условных типах. Они работают не с данными, а с типами, позволяя системе типов TypeScript быть динамической и выразительной, сохраняя при этом строгую статическую проверку.

Какие знаешь операторы которые возвращают тип аргумент? | PrepBro