일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 개발자
- 프론트
- Tanstack Query
- 개발
- TypeScript
- 타입스크립트
- HTML
- 탄스택쿼리
- JavaScript
- 공식문서
- 리액트쿼리
- components
- 부트캠프
- 프론트엔드
- hooks
- 인터넷
- 조건문
- 개발공부
- react
- Tanstack
- 제로베이스
- 코딩
- CSS
- props
- JS
- 리액트
- 콜백
- 프론트엔드 스쿨
- TS
- 자바스크립트
Archives
- Today
- Total
SUE 개발 블로그
TypeScript ) 인터페이스 본문
인터페이스란 ?
타입 별칭과 동일하게 타입에 이름을 지어주는 또 다른 문법이다.
예제 )
interface Person {
name: string;
age: number;
}
이렇게 정의한 인터페이스를 타입 주석과 함께 사용해 변수의 타입을 정의할 수 있다.
const person: Person = {
name: "수보이",
age : 26
};
이렇듯 인터페이스는 타입 별칭과 문법만 조금 다를 뿐 기본적인 기능은 같다고 볼 수 있다.
읽기 전용 프로퍼티
읽기 전용 프로퍼티 또한 동일한 방법으로 설정 가능하다.
interface Person {
readonly name: string;
age?: number;
}
const person: Person = {
name: "이수광",
// age: 26,
};
person.name = '홍길동' // ❌
메서드 타입 정의하기
다음과 같이 메서드의 타입을 정의하는 것 또한 가능하다.
interface Person {
readonly name: string;
age?: number;
sayHi: () => void;;
}
함수 타입 표현식을 이용해 sayHi 메서드의 타입을 정의했다.
함수 타입 표현식 말고 다음과 같이 호출 시그니처를 이용해 메서드의 타입을 정의할 수도 있다.
interface Person {
readonly name: string;
age?: number;
sayHi(): void;
}
메서드 오버로딩
함수 타입 표현식으로 메서드의 타입을 정의하면 메서드의 오버로딩 구현이 불가능하다.
interface Person {
readonly name: string;
age?: number;
sayHi: () => void;
sayHi: (a: number, b: number) => void; // ❌
}
그러나 호출 시그니처를 이용해 메서드의 타입을 정의하면 오버로딩 구현이 가능하다.
interface Person {
readonly name: string;
age?: number;
sayHi(): void;
sayHi(a: number): void;
sayHi(a: number, b: number): void;
}
하이브리드 타입
인터페이스 또한 함수이자 일반 객체인 하이브리드 타입을 정의 할 수 있다.
interface Func2 {
(a: number): string;
b: boolean;
}
const func: Func2 = (a) => "hello";
func.b = true;
주의할 점
인터페이스는 대부분의 상황에 타입 별칭과 동일하게 동작하지만 몇가지 차이점이 있다.
타입 별칭에서는 다음과 같이 Union 이나 Intersection 타입을 정의할 수 있었던 반면 인터페이스는 불가하다.
type Type1 = number | string;
type Type2 = number & string;
interface Person {
name: string;
age: number;
} | number // ❌
따라서 인터페이스로 만든 타입을 Union 또는 Intersection 으로 이용해야 한다면
다음과 같이 타입 별칭과 함께 사용하거나 타입 주석에서 직접 사용해야 한다.
type Type1 = number | string | Person;
type Type2 = number & string & Person;
const person: Person & string = {
name: "수보이",
age: 26,
};
'TypeScript' 카테고리의 다른 글
TypeScript ) 타입스크립트의 타입들 (0) | 2024.02.22 |
---|---|
TypeScript ) 컴파일러 옵션 (0) | 2024.02.22 |
TypeScript ) 타입스크립트의 특징 ( 타입 시스템 ) (0) | 2024.02.22 |
TypeScript ) 타입스크립트란 ? (0) | 2024.02.22 |