- [[関数型の式 (TypeScript)|関数型の式]] - [[呼び出し型]] - `name`プロパティは`function`に存在するため注意 - [[アロー関数 (JavaScript)|アロー関数]]の場合はreadonlyのためエラーになる - functionの場合は上書きできてしまう - [[コンストラクタ型]] - 変数につく型だから非常に紛らわしい... [[メタプログラミング]]のときにしか使わないと思われる `Date`はクラスという認識だけど[[JavaScript]]的には[[Object (JavaScript)|Object]]。[[コンストラクタ型]]と[[呼び出し型]]を持つ[[Object (JavaScript)|Object]]に過ぎない。 - [[ジェネリック関数 (TypeScript)|ジェネリック関数]]のガイドライン -[[ジェネリック制約 (TypeScript)|ジェネリック制約]]を利用しなくていい場合 ([[型パラメーター (TypeScript)|型パラメーター]]で事足りるとき) は、[[ジェネリック制約 (TypeScript)|ジェネリック制約]]を利用しない - 可能な限り[[型パラメーター (TypeScript)|型パラメーター]]を少なくする - [[型パラメーター (TypeScript)|型パラメーター]]が(宣言を除き)1箇所でしか利用されていない場合は本当に必要かを確認する - [[Optional Parameters]] - コールバック関数の `(x: any, i: number) => { ... }` の `i` に[[Optional Parameters]]を使ってはいけない - コールバック関数を指定するユーザーとしては `(x) => { ... }` のように指定することも多いから `i?: number` としたくなる気がする - が... コールバック関数を指定する側が`i`を無視したければ、[[仮引数]]の`i`を省略すればいい - `i?: number`にすると、このコールバック関数を利用する関数内で`i`が省略できてしまい、コールバック関数を指定するユーザーが `i: number` を利用したいときに `undefined`となって利用できなくなってしまう - [[オーバーロード (TypeScript)|オーバーロード]] - [[オーバーロード (TypeScript)|オーバーロード]]の代わりに[[ユニオン型 (TypeScript)|ユニオン型]]が利用可能なら、常にそちらを使う - [[void (TypeScript)|void]]と[[undefined (JavaScript)|undefined]]は違う..と - [[Objectの型とobject型の違い]] - [[unknown型は土管として利用する]] - [[スプレッド構文 (JavaScript)|スプレッド構文]] - [[残余引数 (JavaScript)|残余引数]] - [[分割代入 (JavaScript)|分割代入]] - `func({a, b, c}: {a: any, b: any, c: any})`は`func({a: any, b: any, c: any})`とさせてほしい - [[TypeScriptでvoid型を返すような関数型の実装はvoid型以外の値を返却してもエラーにならない]]