질문 드립니다.


keyof 강의를 듣다가 생긴 에러인데요
prt 함수에서 key의 타입을 string으로 주면 저렇게 에러가 뜨는데
이유를 봐도 이해가 잘 가지 않아서 질문드립니다.
혹시 단순히 string으로 타입을 주면 params의 프로퍼티 키인지 타입스크립트가 알 수 없어서
에러가 뜨는 것인가요?
Answer 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 연산자에 대해 찾아보시기를 추천드립니다.
도움이 되었길 바랍니다.
제네릭 클래스 핸드북 페이지가 undefined라고 나옵니다.
0
8
1
타입 주석
0
48
1
BuilderInit 사용 이유
0
409
1
ts-node extends시 에러가 발생합니다 ㅠㅠ
0
836
1
데코레이터-2 강의 질문이 있습니다.
0
284
1
enum 질문이 있습니다.
0
330
1
색션 2, 데코레이터 개념이 아예 이해가 안됩니다.
0
539
1
변수의 타입에 클래스를 지정해준 것과 지정 안한 것 과의 차이가 어떻게 되는지 궁금해서 질문을 남깁니다.
0
369
2
섹션4 예제0 질문입니다.
0
719
2
제네릭 extends관련질문 있습니다.
0
367
1
안녕하세요 정말 좋은 강의 감사합니다
0
381
1
하나의 인터페이스와 여러 버전의 클래스에 관한 질문
0
413
1
!과 타입 단언 (보충) 질문
0
404
1
화살표 함수에서 this
0
435
1
constructor질문
0
262
1
타입 단언과 관련해서 질문드립니다.
0
651
1
extends와 implements질문 드립니다.
0
302
1
as와 변수의 타입 지정 차이
0
353
1
undefined형식 에러
0
398
1
질문드립니다.
0
264
1
리터럴 타입 질문드립니다.
0
333
1
변수들이 var로 변합니다.
0
528
1
코딩 초보
0
462
1
service계층과 데이터베이스 요청 주고받을 때 Builder패턴 질문
0
1760
1

