// ["a", "b"] -> { a: any, b: any }
type ArrayKeysToObject<TKeys extends any[], TValue = any> = { [K in TKeys[number]]: TValue };
// 예시 타입 확인 => { dog: any, hotDog: any }
type Example = ArrayKeysToObject<["dog", "hotDog"]>
// 함수화
function testFunc<TCol extends any[]>(col: TCol): ArrayKeysToObject<TCol>{ return };
// 함수 호출 테스트: 추론 여부 확인
// ==> 의도된 타입 : { dog: any, hotDog: any }
// ==> 추론된 타입 : ArrayKeysToObject<string[], any> ==> { [x: string]: any }
const example = testFunc(["dog", "hotDog"]);
위와 같이, 타입에서는 추론이 잘되지만 함수화를 했을 때는 추론이 안되는 경우가 있다.
이럴 때는 함수의 제네릭 타입 매개변수에 const
키워드를 붙여주면 된다.
function testFunc<**const** TCol extends any[]>(col: TCol): ArrayKeysToObject<TCol>{ return };