- Published on
✨ 한 눈에 보는 타입스크립트 #5,6 인터페이스/타입 별칭
- 글쓴이
📌 목차
💁🏻
- Intro
- 타입스크립트 개요
- 개발환경
- 타입 기본(Types)
- 인터페이스 (Interface)
- 타입 별칭 (Type Aliases)
- 제네릭 (Generic)
- 함수
- 클래스
- Optional
- 모듈
- TS 유틸리티 타입
- 참고 자료 (References)
인터페이스 (Interface)
인터페이스란?
인터페이스는 타입스크립트 여러 객체를 정의하는 일종의 규칙이며 구조다.
다음과 같이 interface
키워드와 함께 사용한다.
interface IUser {
name: string,
age: number,
isAdult: boolean
}
let user1: IUser = {
name: 'Neo',
age: 123,
isAdult: true
};
// Error - TS2741: Property 'isAdult' is missing in type '{ name: string; age: number; }' but required in type 'IUser'.
let user2: IUser = {
name: 'Evan',
age: 456
};
다음과 같이 속성에 ?
를 사용하면 선택적 속성으로 정의할 수 있다.
선택적 속성이란 '필수가 아닌 속성으로 정의'하는 방법이다.
interface IUser {
name: string,
age: number,
isAdult?: boolean // Optional property
}
// `isAdult`를 초기화하지 않아도 에러가 발생하지 않습니다.
let user: IUser = {
name: 'Neo',
age: 123
};
함수 타입
함수 타입을 인터페이스로 정의하는 경우, 호출 시그니처라는 것을 사용한다.
호출 시그니처는 함수의 매개 변수(parameter)와 반환 타입을 지정한다.
interface IName {
(PARAMETER: PARAM_TYPE): RETURN_TYPE // Call signature
}
클래스 타입
인터페이스로 클래스를 정의하는 경우, implements
키워드를 사용한다.
만약 정의한 클래스로 인수를 사용하는 경우
구성 시그니처(Construct signature)을 사용할 수 있다.
구성 시그니처는 호출 시그니처와 비슷하지만 new
키워드를 사용한다.
인덱싱 가능 타입 (Indexable types)
우리는 인터페이스르 통해 특정 속성(메소드 등)의 타입을 정의할 수는 있지만,
수많은 속성을 가지거나 단언할 수 없는 임의의 속성이 포함되는 구조에서는 기존 방식에 한계가 있다.
이런 상황에서는 인덱스 시그니처(Index signature)를 사용한다.
인덱서의 타입은 string
과 number
만 지정할 수 있다.
keyof
인덱싱 가능 타입에서 keyof
를 사용하면 속성 이름을 타입으로 사용할 수 있다.
인덱싱 가능 타입의 속성 이름들이 유니온 타입으로 적용된다.
타입 별칭
타입 별칭이란?
type
키워드를 사용해 새로운 타입 조합을 만들 수 있다.
하나 이상의 타입을 조합해 별칭(이름)을 부여하며,
정확히는 조합한 각 타입들을 참조하는 별칭을 만드는 것이다.
일반적인 경우 둘 이상의 조합으로 구성하기 위해 유니온을 많이 사용한다.