1. 제네릭

제네릭을 이용하면 클래스나 함수, 인터페이스를 다양한 타입으로 재사용 할 수 있다.
선언할 때는 타입 파라미터만 적어주고 생성하는 시점에 사용하는 타입을 결정한다.

매개변수의 타입이 바뀌었는데 동일한 함수를 재사용하고 싶다면 함수 오버로드를 사용하거나 유니언 타입을 사용할 수 있다.

다른 타입들도 배열로 만들어서 전달 할 경우 아래와 같아진다.

이럴 때 사용할 수 있는 것이 제네릭이다.

<> 사이의 타입 파라미터 T는 타입을 전달 받아 함수에서 사용할 수 있게 해준다.

함수 호출시 타입을 기입해주지 않아도 타입 스크립트는 전달되는 매개변수를 보고 어떤 타입인지 알고 있다.

혹은 옵션 객체의 모습이 정해져 있다면 아래와 같이 작성할 수 있다.


showName 함수는 매개변수를 받아서 그 객체의 name 프로퍼티를 반환한다.

T에는 name이 없다는 에러가 발생한다.
모든 매개변수에 name이 있다고 장담할 수 없기 때문에 에러가 발생하는 것이다.

이 경우에는 다음과 같이 적어준다.

어떤 T 타입이 올건데 그 타입은 name이 string인 객체를 확장한 형태라고 알려주는 것이다.
이러면 다양한 모습의 객체가 올 수 있겠지만 항상 name은 string을 가지고 있게 된다.
만일 name이 없거나 string이 아니라면 book을 전달할 때처럼 에러가 표시된다.

Car의 name을 boolean으로 바꾸면 에러가 발생한다.
string이 와야 한다는 것이다.

2. 유틸리티 타입

keyof

keyof 키워드를 사용하면 User 인터페이스의 키 값들을 유니언 형태로 받을 수 있다.

uk는 User 인터페이스의 키 값만 입력이 가능하다.

Partial<T>

프로퍼티를 모두 옵셔널로 바꿔준다.

아래와 같이 작성할시 age와 gender가 없어 에러가 발생한다.


User를 Partial로 감싸주면 에러가 사라진다.

만약 User에 없는 프로퍼티를 사용하려고 하면 에러가 발생한다.

Required<T>

모든 프로퍼티를 필수로 바꿔준다.

Required를 사용하면 age도 필수 프로퍼티가 되었기 때문에 에러가 발생한다.

Readonly<T>

읽기 전용으로 바꿔준다.

처음에 할당만 가능하고 수정이 불가능하기 때문에 에러가 발생한다.

Record<K, T>

k는 키고 T는 타입이다.

1학년 부터 4학년 까지의 점수를 받는 코드는 다음과 같다.


Record를 사용하면 다음과 같이 작성이 가능하다.

학년 부분과 성적 부분을 타입으로 분리하면 아래와 같이 작성이 가능하다.


적절한 값이 입력되었는지 체크하는 함수를 작성할 때 Record를 다음과 같이 사용할 수 있다.

Pick<T, K>

T 타입에서 K 프로퍼티만 골라서 사용한다.

User에서 id와 name만 가지고 와서 사용할 수 있다.

Omit<T, K>

특정 프로퍼티만 생략하고 사용할 수 있다.

age와 gender는 제외되고 id와 name만 사용 가능하다.

Exclude<T1, T2>

타입1에서 타입2를 제외하고 사용한다.
Omit과 다른 점은 Omit은 프로퍼티들을 제거하는 것이고 Exclude는 타입으로 제거한다.
T1의 타입 중 T2 타입과 겹치는 타입을 제외시킨다.

T2는 string만 남는다.

NonNullable<Type>

null과 undefined를 제외한 타입을 생성한다.


📌 아래 강의의 내용을 정리한 글입니다.

복사했습니다!