[[Mapped Types]]でkeyをイテレートしたあとで、keyを別名にリマップする機能。 [[TypeScript 4.1]]で[[テンプレートリテラル型]]の追加に伴い実装された。 ```ts // asの後に新しいkeyを記載する type New<T> = { [P in keyof T as ...]: T[P] } // 今まではこう type New<T> = { [P in keyof T]: T[P] } ``` たとえば、すべてのkeyに`onChange`のprefixをつけて[[ローワーキャメルケース]]にしたい場合は以下のようになる。 ```ts interface Human { id: number; name: string; } type ChangeHandler<E extends { [key: string]: any }> = { [K in keyof E as `onChange${Capitalize<string & K>}`]: (event: E[K]) => void; }; type HumanChangeHandler = ChangeHandler<Human>; // ^? type HumanChangeHandler = { onChangeId: (event: number) => void; onChangeName: (event: string) => void; } ```