- `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[]) { // ... } ```