概要
- 自分用メモの側面が強いのでご了承ください。
- JavaScriptの仕様のハマりやすいポイントのメモ
- TSの型チェックやESLintなどの一般的なチェックツールで弾けるものは対象外
- TypeScriptで普通に型付けしてても型エラーにならず実行時エラーになるケースなど
配列添字アクセス
-
map
,filter
,forEach
メソッドあたりを使っていれば配列添え字アクセスはめったに必要にならないが、ユーティリティ関数などの実装でたまに必要になることがある。 - 配列
xs: T[]
の要素へ添字アクセスxs[i]
すると値がundefined
になりうるが、xs[i]
の型はT | undefined
ではなくT
に評価されているので型チェックで発見できず実行時エラーとなりうる。 -
at: (array: T[], index: number) => T | undefined
のようなより安全な添え字アクセスをするための関数を自作するのもあり。 -
Immutable.js
のList
であれば、List<T>
型のリストの要素アクセスメソッドget
の返り値はT | undefined
となるので安全だが、ビルトイン配列オブジェクトより遅く、手軽さも損なわれる。
Array.sort
- 文字列でソートされるので注意
- 数値でソートしたい場合
array.sort((a, b) => a - b)
と書く必要があるが、やや面倒。sortNumeric: (array)
のような関数呼び出しにしてもよいが、メソッドチェーンでそのあとに処理をつなげたいときなどに見づらくなりこれはこれで不便。 - (2020/03/06追記) 比較関数の指定を強制するeslintルールがあった → https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/require-array-sort-compare.md
pipeline operatorが実装されれば at
や sortNumeric
関数が使いやすくなるはずだが、現状関数呼び出しするしか無い印象。
(今後追記予定)