any 타입 제외, 한 번 선언한 타입은 바꿀 수 없다.
Array<string>
, string[]
둘 다 사용 가능[string, number]
📌 꼭 타입을 사용해야 하는 경우
- 함수정의
- 객체 사용
- 타입이 명확한 변수 등은 타입 추론을 사용하는 것을 권장함
optional parameter : 함수의 매개변수를 선택적으로 전달 받고 싶을 때, 매개변수명 뒤에 ?
추가
optional property(인터페이스) : 객체의 속성을 선택적으로 부여하고 싶을 때, 속성 명 뒤에 ?
추가
union type : 여러 종류의 타입을 허용하고 싶을 때
- |
(or 연산자)로 연결
type alias : 사용자 정의 타입
- 객체의 복잡한 타입을 설정할 때 권장
- type
키워드로 선언
- 파스칼케이스로 네이밍
intersection type : 타입 여러개를 결합해서 새로운 타입 생성
- &
(and 연산자) 로 연결
- 타입 별칭을 확장할 때 주로 사용
인터페이스
- 객체의 타입을 정의할 때 사용
- 클래스의 타입 지정에 사용, implements
키워드
📌 타입 별칭 vs 인터페이스
- 타입 별칭이 꼭 필요한 경우가 아니면 인터페이스 사용을 권장
- 인터페이스가 더 객체지향 개념과 가깝다.
- 타입 별칭: 기본 타입, 유니언 타입, 인터섹션 타입, 유틸리티 타입, 맵드 타입 등의 정의에 사용
- 인터페이스: 객체, 클래스의 타입 정의
인터페이스 - readonly
키워드
- 읽기 전용 프로퍼티
- 객체 생성시에만 값 할당이 가능하고 이후에는 수정할 수 없음
인터페이스 - index signature
- 속성명을 명시하지 않고 속성명의 타입과 속성값의 타입을 정의
- 일반 속성값의 타입은 인덱스 시그니처의 타입과 같아야 한다.
interface User {
name: string;
email: string;
age: number;
address?: string;
phone?: string;
hobby?: string;
}
// 인덱스 시그니처 사용
interface User {
name: string;
email: string;
age: number;
[param: string]: string | number;
}
클래스, 인터페이스 상속
- extends
키워드 뒤에 상속받을 부모 클래스 지정
- 계층 구조 상속, 다중 상속 가능
인터페이스 재선언(선언 병합)
- 동일한 이름의 인터페이스를 중복으로 선언하면 자동으로 병합되어 확장된다.
📌 타입 확장
- 타입 별칭 :
&
연산자로 확장- 인터페이스:
extends
키워드로 확장, 선언 병합