- [[関数型の式 (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型以外の値を返却してもエラーにならない]]