プロを目指す人のためのTypeScript入門 読書メモ⑨ 第6章(1)
■ 思ったこと
いよいよ骨太ナンバーワン、第6章よ!!がんばるZ!!
■ 第6章 高度な型(6.1~6.1.6)
ユニオン型
- 例えばUser型はT型が入ることもあるし、U型が入ることもある
T | U
でT型またはU型を表せる!いくつ書いてもOK- ・・ただ、User型にはどっちが入ってるか分からなくなる!
- 存在しないプロパティにアクセスする可能性があるとエラーになる
type Animal = { name: string; species: string; age: string; }; type Human = { name: string; age: number; }; type Performer= Animal | Human; const rappy: Performer = { name: "Rappy", species: "rabbit", age: "2", } const akira: Performer = { name: "Akira Kawashima", age: 43, } const gerSpecies = (performer: Performer): string => { // ここでエラーになる // プロパティ 'species' は型 'Performer' に存在しません。 // プロパティ 'species' は型 'Human' に存在しません。 return performer.species; }
- ちなみに上の例でageプロパティは「string | number」型!
インターセクション型(交差型)
T & U
でT型であり、かつ!U型を表せる!こちらも複数書いてOK- こんな感じで
type T= U & {}
やるとT型にU型が重複なしで結合されたがごとく!
オプショナルプロパティ再び
- 復習!オプショナルなプロパティって
型名?: 型
これ! - こいつぁ必ずundefinedとのユニオン型になる
- でも、
型名?: 型
と型名: 型 | undefined
は意味が違うとな、、そうなの!? - 前者は値自体がなくてもオッケーだが、後者はないならundefined入れないとダメ
型名?: 型
は値を入れないことでundefinedを示せるってことだけど、ワンチャン書き忘れかもしれんし、型名: 型 | undefined
のように明示的に入れてあげた方が親切かも?
オプショナルチェイニング
- プロパティアクセスの亜種、式を作る構文!
obj?.hoge
みたいにできる。オブジェクトがnullやundefinedでもOKなのが特徴- これ入ってたらOKだけどundefinedなら処理しないよ、がif文書かずともカンタンに!
- 関数呼び出し、メソッド呼び出しでも使える。
?.()
で処理があるときだけ実行できるのだ- とても便利だけど、es2020だと実行時エラーになった。調べると、es2018なら使えるみたい。フーム?
- 一度?を書いたらそれ以降のプロパティアクセス!関数呼び出し!メソッド呼び出し!すべてすっ飛ばす!!だから、
func?.().toString
なんて書いても問題ないぜ
■ 感想
知ってるようで知らなったユニオン型の挙動いろいろ…この本はほんとにわかりやすい!!