ryokatsu.dev

【書評】プログラミングTypeScript 〜第6章〜


O’Reillyから発売されている「プログラミングTypeScript」の書評。

https://www.oreilly.co.jp/books/9784873119045/

6章 高度な型

この章は、色々な型の拡充や、絞り込みなどを扱った章のためリファレンスっぽい内容だったので軽くそれぞれの単語をおさらいだけする。

サブタイプ

A、Bという2つの型があり、BがAのサブタイプ(派生型)である場合、Aが要求されるところ ではどこでも、Bを安全に使うことができる。

  • 配列はオブジェクトのサブタイプ
  • タプルは配列のサブタイプ
  • すべてのものは anyのサブタイプです
  • neverはすべてのもののサブタイプです

変性

パラメータ化されたジェネリック型とか、複雑な型については以下のようになっている。

  • 不変性(invariance)
    • Tそのものを必要とする。
  • 共変性(covariance)
    • <:Tであるものを必要とする。
  • 反変性(contravariance)
    • スーパータイプ(>:Tであるもの)を必要とする。
  • 双変性(bivariance)
    • <:Tまたは >:Tであれば OK。

型の拡大

型推論がどのように機能するかを理解するための鍵となるもの。より一般的な型を推論しすぎる傾向にあるので、 プログラマーの作業はより簡 単になり、型チェッカーの不満を抑えるために費やす時間が少なくて済む

let a = 'x' // string
let b = 3  // number
var c = true // boolean 
const d = {x: 3} // {x: number}
enum E {X, Y, Z} let e = E.X 

const アサーション

これを使うと、宣言と同時に型の拡大を抑えることができる。

型の絞り込み

typeof、instanceof、inなどを使って、型の絞り込みを行う。

この記事がわかりやすい

TypeScriptの型推論詳説

型アサーション

Bという型があり、「A <: B <: C」という関係がある場合、Bが実際にはAまたはCであることを型 チェッカーに主張することができる。