[[条件付き型 (TypeScript)|条件付き型]]において、比較対象の型の一部を別名の型として抽出するキーワード。
```ts
type Head<T extends any[]> = T extends [infer U, ...any[]]
? U
: T extends Array<infer U>
? U
: never;
type A = Head<string[]>;
// ^? type A = string
type B = Head<[string, number]>;
// ^? type B = string
type C = Head<[number, string, boolean]>;
// ^? type C = number
type D = Head<boolean>;
// Type 'boolean' does not satisfy the constraint 'any[]'.(2344)
```
<button class="playground"><a href="https://www.typescriptlang.org/play?#code/C4TwDgpgBAEhCGATAPAFShAHsCA7RAzlPLiANoC6AfFALxTpY75FkCWuAZhAE5QCqAGigA6MSXIUKAKChQA-ANlQAXAwzY8hKAEEePeCGQdufflWWL+ytbggA3XgG5p00JF11YCFAWA8OAHNKKhcAejC5KAA9eTdwaAAhLzgkZDI-ANxA4VwAVwBbACNeanDIuVj4jwBhFJ90-OLeYUyg4SKAe06AGwRcMukIqKr3aAARerSu3v7QocjUBKgAchm+khWoRE6IIlxO4CgCeGA2Ak4QKGAAC2gAY07cTPgOI5WJShWRAAoAJgAzAAWIEASmkQA">Playground</a></button>