• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

질문 드립니다.

23.05.17 20:33 작성 23.05.18 18:49 수정 조회수 253

0

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

 

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

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

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

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

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

에러가 뜨는 것인가요?

답변 2

·

답변을 작성해보세요.

1

안녕하세요 :)

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

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

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

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

방법이 있습니다.

aa aa님의 프로필

aa aa

질문자

2023.05.19

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

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

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.05.18

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

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

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

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

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

도움이 되었길 바랍니다.