0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TIPSAdvent Calendar 2023

Day 25

【TypeChallenge】extends と infer

Last updated at Posted at 2023-12-25

このサイトで Type Challenges の洗礼を受けてきました。初級編のクリアにあたって必要だった知識を公開していこうと思います。

型の定義のしかた

type Hoge<T: Fuga> = いろいろな定義

まず、Type Challenges における型定義はだいたいジェネリクスを用いることになります。左辺のジェネリクスで定義した型を右辺でこねくり回すイメージです。

extends

T extends U

$T$ が $U$ に代入可能であることを表します。
ジェネリクスの制約としての文脈ならば、$T$ は $U$ の性質を満たすと言い換えられそうです。

type Hoge<T extends any[]> = いろいろな定義

例えば上のような extends の使い方をすれば、$T$ が配列であることを強制できます。

また、Conditional Types ではもっぱら条件分岐の条件式として扱われます。

T extends U ? X : Y

$T$ が $U$ に代入可能なら $X$、それいがいなら $Y$ になる型です。

infer

type PromiseUnwrap<T extends Promise<any>> = T extends Promise<infer U> ? U : never

実際にジェネリクスに型を突っ込んだときに評価されて出てくる型を扱うのが infer です。
Promise 型の何か $T$ を突っ込み、実行時に中身の U を評価します。

型推論と呼ばれる機能なのですが、推論ですから、評価の対象が必要なキーワードです。上の定義のように extends での代入で型を抽出するのに使うことができます。

おわり

難しすぎ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?