object key remapping 의 경우 실전에서 가장 많이 사용되는 패턴이 아닐까 싶다. 특히 마이크로서비스를 개발하다보면 팀 간 변수 이름이 미묘하게 다른데, 예를 들어 product 의 ID를 표현하고 싶을 때 A라는 팀에서는 `productId` B팀에서는 `productNo` 으로 명명할 수 있다. 이런 경우 타입은 당연히 같은데 이런 경우 object key remapping 테크닉이 유용하게 사용될 수 있다.
```typescript
interface OtherTeamProduct {
productId: number
}
type Keys = keyof OtherTeamProduct
type MyTeamProduct = {
[TKey in Keys as TKey extends `${infer R}Id`
? `${R}No`
: TKey]: OtherTeamProduct[TKey]
}
const myTeamProduct: MyTeamProduct = {
productNo: 1,
}
```
위의 코드는 `productId`를 가진 인터페이스를 productNo로 변경하는 코드이다. object의 키를 변경하는 방법은 `as` 키워드를 사용해서 변경하고 싶은 string을 적으면 된다. 위 예제의 경우 [[infer]]를 사용해서 `Id` 앞에 오는 [[String literal type]]을 추론하고 추론된 것을 새로 만드는 키의 일부로 사용한다. (`R`이 그 부분)
---
참조 강의: https://inf.run/FVDi