概要
- 自分用メモの側面が強いのでご了承ください。
- 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 関数が使いやすくなるはずだが、現状関数呼び出しするしか無い印象。
(今後追記予定)