inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

타입스크립트의 모든 것

질문 드립니다.

해결된 질문

375

aa aa

작성한 질문수 2

0

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

 

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

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

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

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

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

에러가 뜨는 것인가요?

typescript Deno nestjs

답변 2

1

yongsoocho

안녕하세요 :)

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

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

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

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

방법이 있습니다.

0

aa aa

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

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

1

인프런 AI 인턴

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

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

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

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

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

도움이 되었길 바랍니다.

핸드북 light/dark mode 관련 이슈가 있는 것 같습니다.

0

18

1

타입 주석

0

48

1

BuilderInit 사용 이유

0

412

1

ts-node extends시 에러가 발생합니다 ㅠㅠ

0

837

1

데코레이터-2 강의 질문이 있습니다.

0

285

1

enum 질문이 있습니다.

0

331

1

색션 2, 데코레이터 개념이 아예 이해가 안됩니다.

0

541

1

변수의 타입에 클래스를 지정해준 것과 지정 안한 것 과의 차이가 어떻게 되는지 궁금해서 질문을 남깁니다.

0

371

2

섹션4 예제0 질문입니다.

0

720

2

제네릭 extends관련질문 있습니다.

0

367

1

안녕하세요 정말 좋은 강의 감사합니다

0

382

1

하나의 인터페이스와 여러 버전의 클래스에 관한 질문

0

415

1

!과 타입 단언 (보충) 질문

0

406

1

화살표 함수에서 this

0

438

1

constructor질문

0

263

1

타입 단언과 관련해서 질문드립니다.

0

651

1

extends와 implements질문 드립니다.

0

302

1

as와 변수의 타입 지정 차이

0

353

1

undefined형식 에러

0

400

1

질문드립니다.

0

264

1

리터럴 타입 질문드립니다.

0

334

1

변수들이 var로 변합니다.

0

529

1

코딩 초보

0

463

1

service계층과 데이터베이스 요청 주고받을 때 Builder패턴 질문

0

1763

1