inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

한 입 크기로 잘라먹는 타입스크립트(TypeScript)

제네릭 인터페이스 & 제네릭 타입 별칭

타입스크립트 강의 제네릭 인터페이스, 제네릭 타입 별칭 질문

해결된 질문

280

윤소미

작성한 질문수 2

0

제네릭 인터페이스, 제네릭 타입 별칭 강의 13:19초부터

goToschool(developer);

에 Developer는 Student type에 할당할 수 없고,
그래서 타입좁히기는 없어도된다고 하셨는데
이 부분이 이해가 잘 안가서 부연설명을 자세히 해주실수 있을까요? ㅠㅠ 어렵네요

함수이름이 goToschool이고 developerUser의 경우 User<Developer > 형식 이기 때문에 할당이 불가능하다 정도는 이해했습니다.

typescript

답변 2

1

이정환 Winterlood

안녕하세요 이정환입니다.

우선 해당 실습 예제의 goToSchool 함수의 매개변수 user의 타입은 User<Student>로 정의되어 있습니다.

따라서 User<Developer> 타입의 값은 이 매개변수에 할당될 수 없다! 라는 이야기입니다.

그러므로 해당 함수 내에서는 별도의 조건문을 통해 user 매개변수에 담긴 값의 타입이 User<Student> 타입이 맞는지 확인하는 작업을 거칠 필요가 없습니다. 이미 매개변수의 타입을 User<Student>로 정의해 두었으니까요

요지는 제네릭을 사용하기 전에는 모두 User 라는 타입으로 통일하여 매개변수를 받아왔기 때문에 별도의 타입 좁히기가 필요했지만 제네릭을 활용하면 더 세분화된 타입으로 나누어 정의할 수 있기 때문에 더 이상의 타입 좁히기는 필요하지 않다는 의미입니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

윤소미님 질문에 대해 답변드리겠습니다.

제네릭 인터페이스와 타입 별칭에서, Developer 타입은 Student 타입에 할당할 수 없다는 부분에 대해 궁금하시군요.

제네릭을 사용하는 경우 일반적으로 제네릭 타입은 그 사용 목적에 따라 여러 가지 타입을 받을 수 있는 형태로 정의됩니다. 그렇기 때문에 User<Developer> 형식은 User<Student> 형식과는 호환되지 않습니다. 이것은 타입스크립트에서 타입의 구조가 다르기 때문에 발생하는 현상으로, 타입스크립트의 기본적인 타입 시스템의 일부입니다.

함수 goToschool의 인자로 developer를 넣었을 때, Developer 타입은 Student 타입에 할당할 수 없다고 하셨는데, 이는 goToschool 함수가 Student 타입을 인자로 예상하지만, 실제로 넘겨진 인자가 Developer 타입이라는 의미입니다. 따라서 이 두 타입 합쳐서 사용할 때는 변환 과정이나 호환이 필요한 부분에서 타입을 좁혀야 할 필요가 있지만, 여기서 말하는 ‘타입을 좁히기’ 없이도 가능하다는 측면은 특정 조건에서 이 두 타입이 명확하게 구분될 경우를 의미할 수 있습니다.

즉, User<Developer>User<Student>와 다르기 때문에 직접적인 할당은 불가능하며, 이를 해결하기 위해서는 해당 타입들이 어떻게 정의되어 있는지, 그리고 함수 goToschool에서 어떤 타입의 인자를 기대하는지를 명확히 이해해야 합니다.

타입스크립트에서는 이러한 타입의 불일치를 해결하기 위해 타입 단언(type assertion), 타입 가드(type guards), 인터페이스 확장(extends) 같은 여러 방법을 사용할 수 있습니다. 그렇기 때문에 상세한 부분에 대해 더 깊이 이해하고 싶으시다면, 타입스크립트의 고급 타입 사용 방법에 대해 공부하시는 것도 추천드립니다.

원하는 답변을 찾지 못하셨다면, 강의 페이지의 우측 배너 혹은 하단 ‘문의하기’를 통해 강사님께 직접 질문을 남기는 것도 좋은 방법입니다.

추가로 궁금한 점이 있으시다면 언제든지 문의해주세요.

제네릭 클래스 핸드북 페이지가 undefined라고 나옵니다.

0

21

2

적절한 타입 찾기 React.ChangeEvent<HTMLInputElemen>

0

34

2

outDir 옵션 추가 후 컴파일 오류 질문

0

71

1

호출 시그니처 질문

0

69

2

서로소 유니언 타입이 discriminated union과 동의어 인가요?

0

80

2

조건부타입소개 중 함수오버로딩 활용 시 인수의타입과 함수의 반환값의 타입이 깨지는 문제

0

72

1

할인쿠폰 관련하여

0

164

2

프론트엔드에서의 인터페이스활용

0

97

2

안녕하세요 이정환님!

0

95

1

Node.js 설치에 관한 질문입니다.

0

81

2

함수 타입 호출 시그니처

0

61

1

35강. 모듈 보강은 라이브러리 파일을 직접 편집해야 하나요?

0

68

2

인터페이스 문법이 있는데 타입 별칭 문법은 왜 있나요?

0

121

4

마우스 호버 시 정보

0

93

2

vite으로 리액트 빌드하기를 업데이트해주세요.

1

91

2

타입가드를 만들어 사용하는 이유가 궁금합니다.

0

86

2

섹션 12가 너무 어려운데... 정상이겠죠..?

0

140

2

선생님.. 알고리즘도 강의해주시면안되나요

0

104

2

선생님은 어떻게 이런걸 아세요?

0

134

1

type: module

0

100

2

7:17초 업캐스팅 질문이있습니다!

0

80

1

슈퍼타입질문

1

67

2

프로젝트 설치

0

108

2

enum은 비원시 타입이면서 열거형 타입이 되는건가요?

0

73

2