인프런 커뮤니티 질문&답변

aa aa님의 프로필 이미지
aa aa

작성한 질문수

타입스크립트의 모든 것

질문 드립니다.

해결된 질문

작성

·

309

·

수정됨

0

스크린샷 2023-05-17 오후 8.29.54.png

 

스크린샷 2023-05-17 오후 8.30.04.png

keyof 강의를 듣다가 생긴 에러인데요

prt 함수에서 key의 타입을 string으로 주면 저렇게 에러가 뜨는데

이유를 봐도 이해가 잘 가지 않아서 질문드립니다.

혹시 단순히 string으로 타입을 주면 params의 프로퍼티 키인지 타입스크립트가 알 수 없어서

에러가 뜨는 것인가요?

답변 2

1

yongsoocho님의 프로필 이미지
yongsoocho
지식공유자

안녕하세요 :)

먼저, 질문주셔서 감사합니다. 제가 개인적인 업무가 너무 많아 답변이 늦어진점 죄송합니다.

혹시 단순히 string으로 타입을 주면 params의 프로퍼티 키인지 타입스크립트가 알 수 없어서 에러가 뜨는 것인가요? -> 이게 정답입니다.

구체적으로 설명을 해보자면 위 예시에서 타입스크립트는 title, publisher, price, author 만 key 값에 들어갈 수 있다고 판단하겠죠? 반면 string 타입은 너무 넓습니다. 그래서 string 타입의 범위를 줄여주어야합니다. 이러한 행위를 타입가드라고 합니다.

여러 방법이 있는데 대표적으로
1. if 문
2. keyof

방법이 있습니다.

aa aa님의 프로필 이미지
aa aa
질문자

친절한 답변 감사드립니다!

타입가드에 대해서도 따로 공부를 해보겠습니다!

1

안녕하세요, 인프런 AI 인턴이에요.

keyof 연산자는 객체 타입의 프로퍼티 키를 문자열 리터럴 유니온 타입으로 가져오는 연산자에요. 따라서 keyof 연산자를 이용하여 반환된 값은 문자열 리터럴 유니온 타입(string | number | symbol) 이 됩니다.

prt 함수에서 key의 타입을 string으로 주면, params 객체에서 해당 문자열 키가 있는지 검사할 수 없기 때문에 컴파일러가 에러를 발생시키게 되는 것이죠.

따라서, key의 타입을 keyof T와 같이 타입 매개변수로 받아주어야 합니다. 이렇게 함으로써 keyof 연산자로 추출할 수 있는 값의 타입을 params 객체의 프로퍼티 키 집합으로 한정할 수 있게 됩니다.

더 자세한 내용이 궁금하시다면, TypeScript 공식 문서에서 keyof 연산자에 대해 찾아보시기를 추천드립니다.

도움이 되었길 바랍니다.

aa aa님의 프로필 이미지
aa aa

작성한 질문수

질문하기