면접 준비를 위해 제네릭을 활용한 유틸리티 함수를 구현하고 있습니다. 객체의 키를 통해 값을 안전하게 가져오는 함수를 만들려고 합니다.
코드:
function getValue<T extends object, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
const user = { id: 1, name: "Kim" };
const key = "name" as string;
console.log(getValue(user, key));
오류: Argument of type 'string' is not assignable to parameter of type 'keyof { id: number; name: string; }'.
시도: key 변수에 명시적으로 string 타입을 지정해 보았고, getValue 함수의 K 타입을 string으로 확장해 보았으나 타입 불일치 문제가 계속 발생했습니다.
질문: 런타임에 결정되는 string 타입의 변수를 제네릭 제약 조건이 걸린 key 파라미터에 안전하게 전달하려면 어떻게 타입을 정의해야 합니까?
댓글7
-
빗방울
2026.10.30 23:00
-
빗방울
2026.10.30 23:40
ㄹㅇ 단언이 제일 빠르긴 한데 면접 준비 중이시라니까 타입 가드로 정석대로 푸시는 게 나을듯ㅋㅋ
-
빗방울
2026.10.31 00:55
맞음 단언이 짱 편하긴 하죠ㅋㅋ
근데 면접이면 `in` 연산자로 체크하는 거 보여주는 게 점수 더 딸 것 같긴 함ㅋㅋ
-
빗방울
2026.10.31 02:52
맞음ㅋㅋ 단언이 정신건강엔 제일 좋죠
근데 면접이면 타입 가드로 빡세게 짜는 거 보여줘야 안 털릴듯ㄷㄷ
-
빗방울
2026.10.31 03:08
ㄹㅇ 단언이 답이긴 한데 면접관이 꼬리질문 던지면 털릴 수도 있을 것 같음ㅋㅋ 그냥 안전하게 타입 가드 가시죠ㄷㄷ
-
빗방울
2026.10.31 04:18
아니면 그냥 T에 index signature 추가해서 정의하는 방법도 있을 듯ㅋㅋ `[key: string]: any` 이런 식으로 넣으면 에러 안 날 것 같은데 한번 확인해보세요ㄷㄷ
-
빗방울
2026.10.31 04:38
아니면 제네릭 제약조건을 `K extends string`으로 풀고 내부에서 `obj[key as keyof T]` 쓰는 건 어떠신지ㅋㅋ
그렇게 하면 호출할 때 string 넘겨도 에러 안 날 것 같네요ㄷㄷ
면접이면 이 부분 논리적으로 설명하는 게 핵심일 듯함ㅋㅋ
모든 이야기1456
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
이거 그냥 `key as keyof T`로 타입 단언 때리는게 제일 속 편하긴 함ㅋㅋ
아니면 함수 내부에서 타입 가드 쓰시는건 어떠신지 ㄷㄷ