호출 시그니처, 인덱스 시그니처
이 함수의 타입을 재사용할 수 있습니다. 위에 빨간 박스가 호출 시그니처입니다.
인덱스 시그니처는 객체와 배열을 위한 시그니처입니다.
객체에 어떤 타입을 명확하게 더 추가될지 몰라서 [key:string] : unknown방식으로 인덱스 시그니처를 사용합니다.
함수 오버로딩
左) 같은 로직 및 매개변수를 갖고 있는 함수 2개가 있습니다.
右) 두 함수를 하나로 만듭니다. 타입만 변경하면 됩니다.
접근 제어자
public | default 값이며, 어디서나 접근 가능 |
protected | 클래스 내, 상속받은 자식 클래스에서 접근 가능 |
private | 클래스 내에서만 접근 가능 |
Generic 기본
generic을 사용하면 재사용성이 높은 함수와 클래스를 생성할 수 있습니다.
any처럼 타입을 직접 지정하지 않지만, 타입을 체크해 컴파일러가 오류를 찾을 수 있게 됩니다.
작성할 때는 타입이 확실하지 않을 시 <T>를 사용하면 됩니다.
T는 보편적으로 사용하고 있습니다. 원하면 type로도 대체해도 됩니다.
함수를 실행할 때 타입을 명시해 줍니다.
Utility Type
partial은 특정 타입의 부분 집합을 만족하는 타입을 정의할 수 있습니다.
pick은 특정 타입에서 몇 개 속성을 선택해서 타입을 새롭게 정의할 수 있습니다.
omit은 특정 타입에서 특정 속성을 제거해서 타입을 새롭게 정의할 수 있습니다.
pick과 정반대 됩니다.
exclude은 일반 union 유형을 전달한 다음 두 번째 인수에서 제거할 멤버를 지정합니다.
required는 원래 유형이 일부 속성을 선택 사항으로 정의한 경우에도 객체에 Required 속성이 있는지 확인해야 하는 경우가 있습니다.
위에 코드처럼 lastName은 선택 사항입니다. secondUser은 required를 사용해서 lastName도 존재해야만 에러 없습니다.
record는 속성 키가 keys고, 속성 값이 type인 객체 type을 구성합니다.
이 유틸리티는 type의 속성을 다른 type에 매핑하는 데 사용할 수 있습니다.
returnType는 함수 T의 반환 타입으로 구성된 타입을 만듭니다.
위에 코드처럼 함수의 반환 타입은 string이거나 void입니다. b변수는 true란 boolean형이라 에러납니다.
implements vs extends
extends키워드는 부모 클래스에 있는 프로퍼티나 메소드를 상속해서 사용할 수 있습니다.
implements키워드는 새로운 클래스의 타입 체크를 위해서 사용되며, 그 클래스의 모양을 정의할 때 사용합니다.
keyof operator
keyof 연산자는 제공된 타입의 키를 추출하여 새로운 union유형으로 반환합니다.
Mapped Types
Mapped type을 사용하는 것은 type이 다른 type에서 파생되고 동기화 상태를 유지해야 하는 경우에 특히 유용합니다.
위 예제 보겠습니다. AppConfig와 AppPermissions 사이에 암시적 관계가 있습니다.
AppConfig에 값이 추가될 때마다 AppPermissions에서 해당 boolean값도 같이 추가해야 됩니다.
이러한 때 mapped type을 사용하면 좋습니다.
위 예시처럼 Users중 3명이 있었으며, UserAge는 3명을 모두 number type을 가지기로 결정했습니다.
여기서 [K in Users]가 mapped type을 사용하는 겁니다.
K는 다른 걸로 수정해도 상관 없습니다.
tsconfig.json파일 더 자세히 알아보기
전체구성
'프론트엔드 > Typescript' 카테고리의 다른 글
useRef 타입스크립트 (0) | 2023.09.21 |
---|---|
Typescript 기본 배우기(1) (0) | 2023.09.07 |