해결된 질문
작성
·
305
·
수정됨
0
keyof 강의를 듣다가 생긴 에러인데요
prt 함수에서 key의 타입을 string으로 주면 저렇게 에러가 뜨는데
이유를 봐도 이해가 잘 가지 않아서 질문드립니다.
혹시 단순히 string으로 타입을 주면 params의 프로퍼티 키인지 타입스크립트가 알 수 없어서
에러가 뜨는 것인가요?
답변 2
1
안녕하세요 :)
먼저, 질문주셔서 감사합니다. 제가 개인적인 업무가 너무 많아 답변이 늦어진점 죄송합니다.
혹시 단순히 string으로 타입을 주면 params의 프로퍼티 키인지 타입스크립트가 알 수 없어서 에러가 뜨는 것인가요? -> 이게 정답입니다.
구체적으로 설명을 해보자면 위 예시에서 타입스크립트는 title, publisher, price, author 만 key 값에 들어갈 수 있다고 판단하겠죠? 반면 string 타입은 너무 넓습니다. 그래서 string 타입의 범위를 줄여주어야합니다. 이러한 행위를 타입가드라고 합니다.
여러 방법이 있는데 대표적으로
1. if 문
2. keyof
방법이 있습니다.
1
안녕하세요, 인프런 AI 인턴이에요.
keyof 연산자는 객체 타입의 프로퍼티 키를 문자열 리터럴 유니온 타입으로 가져오는 연산자에요. 따라서 keyof 연산자를 이용하여 반환된 값은 문자열 리터럴 유니온 타입(string | number | symbol) 이 됩니다.
prt 함수에서 key의 타입을 string으로 주면, params 객체에서 해당 문자열 키가 있는지 검사할 수 없기 때문에 컴파일러가 에러를 발생시키게 되는 것이죠.
따라서, key의 타입을 keyof T와 같이 타입 매개변수로 받아주어야 합니다. 이렇게 함으로써 keyof 연산자로 추출할 수 있는 값의 타입을 params 객체의 프로퍼티 키 집합으로 한정할 수 있게 됩니다.
더 자세한 내용이 궁금하시다면, TypeScript 공식 문서에서 keyof 연산자에 대해 찾아보시기를 추천드립니다.
도움이 되었길 바랍니다.
친절한 답변 감사드립니다!
타입가드에 대해서도 따로 공부를 해보겠습니다!