- `draw({shape: Shape})` はやってしまいそう...
- 引数に指定された[[オブジェクト型 (TypeScript)|オブジェクト型]]の`shape`[[プロパティ (JavaScript)|プロパティ]]を、`Shape`という名の[[仮引数]]として扱うという意味であり、`shape`が`Shape`型であるという意味ではない
- [[読み取り専用プロパティ (TypeScript)|読み取り専用プロパティ]]
- `readonly`ではないインターフェースに代入して、そちらを変更すると普通に変更できてしまう
- あくまで型による制約に過ぎないので
- 当然[[ランタイム]]時も動く
- [[インデックス型]]
- [[TypeScriptのインデックス型は数値と文字列を区別しない]]
- [[TypeScriptのインデックス型にて値に割り当て可能な型は1種類]]
- Excess Property Checks
- 定義されていない型は害がないからあってもいいのでは?
- [[TypeScriptのオブジェクト型は定義されていないプロパティがあるとエラーになる]]
- [[Vue]]でエラーになるのはオマケのプロパティがついてきてるからなのかな... だから [[型アサーション (TypeScript)|型アサーション]]が必要...と
- [[すべてがオプショナルであるTypeScriptのオブジェクト型には少なくとも1つのプロパティが存在しなければ代入できない]]
- [[交差型 (TypeScript)|交差型]]
- [[ReadonlyArray]]
- [[ReadonlyArrayはreadonlyプロパティのように双方向代入はできない]]
- [[残余プロパティ (JavaScript)|残余プロパティ]]
- [[TypeScript 4.2#先頭や中間へのRest Elements対応]]
- [[残余プロパティ (JavaScript)|残余プロパティ]]は[[TypeScript 3.0]]から (末尾のみ)
以下の便利さについてが今一つ分からん...
```ts
function readButtonInput(...args: [string, number, ...boolean[]]) {
const [name, version, ...input] = args;
// ...
}
```
```ts
function readButtonInput(name: string, version: number, ...input: boolean[]) {
// ...
}
```