TypeScript に慣れようと思い、こちらの問題集を解きました。
詰まった問題
- 【Lv.1】引数の型注釈 4(オブジェクトの必須ではないプロパティ)
- オプショナルプロパティ
プロパティ名?: 型
を使う
- オプショナルプロパティ
- 【Lv.2】引数の型注釈 5(関数)
func: (引数名: 型) => void
- 【Lv.2】引数の型注釈 7(イベントリスナー)
- KeyboardEvent オブジェクトを調べた
- 【Lv.3】window を拡張する
- インターフェースを使ったところエラーが解消できなかったので
vdeclare global
を使った
- インターフェースを使ったところエラーが解消できなかったので
- 【Lv.3】オブジェクトのインデックス
- 解答例1. const アサーション(
as const
)は 変数宣言のときに、末尾にas const
をつけるとその値をreadonlyにした上で、リテラル型にしてくれます。とのこと。またreadonly
プロパティと違って再帰的に適用される。 - 解答例2. `Record<Keys,Type> オブジェクトの型を作るユーティリティ型
- 解答例1. const アサーション(
- 【Lv.2】テンプレートリテラル型 2
- 先頭の文字列を固定できる
- 【Lv.2】要素数の決まった配列 1
- ユニオン型
|
とタプル型[]
で要素の個数を限定する
- ユニオン型
- 【Lv.3】要素数の決まった配列 2
- タプル型とスプレッド型を使う
- 【Lv.3】
switch
文の網羅性チェック(exhaustiveness check)satisfies
を使った網羅性チェック
- 【Lv.3】不明な返り値の型ガード
感想
開発のときには簡単な型注釈で済んだのですが、問題集を通して型に指定できる要素などを知り奥深さの一端を知れました。