Каким образом можно использовать условные типы (conditional types) в TypeScript?

Пользователь

от colleen , в категории: Компьютерные технологии , год назад

Каким образом можно использовать условные типы (conditional types) в TypeScript?

Facebook Vk Ok Twitter Telegram Whatsapp

1 ответ

Пользователь

от tito_wiegand , год назад

@colleen 

Условные типы в TypeScript позволяют создавать типы, которые зависят от условия. Для определения условных типов используется ключевое слово infer.


Одним из примеров использования условных типов является определение типа значения, которое будет возвращено функцией, если ее вызов выполнится успешно:

1
2
3
4
5
6
7
type ReturnType = T extends (...args: any[]) => infer R ? R : any;

function foo(): string {
  return 'Hello, world!';
}

type FooReturn = ReturnType; // FooReturn === string


В этом примере тип FooReturn определяется с помощью условного типа ReturnType. Если тип T является функцией с аргументами типа any[], то условие T extends (...args: any[]) => infer R будет истинным. Тогда тип R будет присвоен типу FooReturn.


Кроме того, условные типы могут использоваться при создании универсальных типов, которые зависят от типов других переменных:

1
2
3
4
5
6
type Value = T extends { value: infer V } ? V : never;

type Item = { value: string };
const item: Item = { value: 'Hello, world!' };

const example: Value = 'Hello, world!'; // example === string


Здесь тип Value зависит от типа переменной T. Если тип T имеет свойство value с типом V, то тип V будет присвоен типу Value<T>. В примере переменная example имеет тип string, потому что тип переменной item имеет свойство value с типом string.