Skip to main content
Практика завдань

Infer ключове слово в TypeScript — infer TypeScript

infer — це ключове слово в TypeScript, яке використовується для виведення типів в умовних типах. Воно дозволяє TypeScript автоматично виводити типи в залежності від контексту, роблячи код більш гнучким і уникаючи дублювання типів.

infer використовується разом з умовними типами для визначення типу на основі структури іншого типу. Це робить код більш динамічним і зменшує потребу в явному зазначенні типу в деяких ситуаціях.

Як працює infer?

Коли ви використовуєте infer, TypeScript може виводити типи без явного їх зазначення, спираючись на те, як вони використовуються в умовному типі. Це дозволяє створювати більш універсальні та гнучкі типи.

Приклади використання infer

Виведення типу повернення функції

infer часто використовується для витягування типу повернення функції з її типу. Це корисно, коли вам потрібно отримати тип з об'єкта або функції без явного зазначення типу.

typescript
type ReturnTypeOfFunction<T> = T extends (...args: any[]) => infer R ? R : never; function getString(): string { return "Hello, world!"; } type Result = ReturnTypeOfFunction<typeof getString>; // string

У цьому прикладі, використовуючи infer R, TypeScript виводить тип повернення функції getString, який буде string.

  • ReturnTypeOfFunction<T> — це умовний тип, який перевіряє, чи є тип T функцією. Якщо так, то infer R виводить тип повернення функції.
  • Тип Result буде string, оскільки функція getString повертає рядок.

Використання infer з масивами

infer також можна використовувати для витягування типів елементів масиву.

typescript
type ElementType<T> = T extends (infer U)[] ? U : never; const numbers: number[] = [1, 2, 3]; type NumberType = ElementType<typeof numbers>; // number

Тут тип ElementType<T> перевіряє, чи є тип T масивом. Якщо так, infer U витягує тип елемента масиву (в нашому випадку number).

  • NumberType буде дорівнювати number, оскільки масив numbers містить елементи типу number.

Умовне використання infer в більш складних типах

infer може бути корисним для витягування типів у більш складних типах, таких як об'єкти, класи та інші структури даних.

typescript
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T; type ResolvedType = UnwrapPromise<Promise<string>>; // string type NonPromiseType = UnwrapPromise<number>; // number

У цьому прикладі UnwrapPromise<T> — це умовний тип, який витягує тип, на який посилається Promise. Якщо T є Promise, то infer U витягує тип, загорнутий у Promise, в цьому випадку string.

  • ResolvedType буде дорівнювати string, оскільки Promise<string> витягує тип string.
  • NonPromiseType залишається типом number, оскільки T не є Promise.

Коли використовувати infer?

  • Коли вам потрібно витягнути тип з функції або об'єкта без явного зазначення.
  • Для роботи з більш складними типами, такими як масиви, проміси та інші типи, де потрібно витягувати типи елементів.
  • Для створення універсальних типів, які можуть адаптуватися до різних ситуацій, допомагаючи уникнути дублювання коду та підвищуючи гнучкість.

Рекомендація:

Використовуйте infer для витягування типів в умовних типах, щоб зробити код більш гнучким і уникнути дублювання. Це особливо корисно при роботі з функціями, масивами та складними типами.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.

Дочитали статтю?
Практика завдань