[[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; }
```