Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- js 문자열을 문자배열로
- @Moditying @Query
- ubuntu타임존
- 우분투 시간 변경
- 스프링 데이타 JPA
- ...점점점문법
- 단어 제거
- sql like연산자
- 중첩배열
- 재귀스왑
- 중복문자제거
- 중복단어제거
- 중복된 단어
- sql 문자열 패턴 검색
- 중첩배열평탄화
- 객체의 밸류값만 찾기
- 레디스 확인
- 코딩 어?
- 문자열 중복
- 프론트엔드 스쿨
- indexOf()
- 시퀄 문법
- 5.3.8 Modifying Queries
- 객체의키값만 찾기
- 중복 문자열
- 제로베이스
- 깃 토큰 만료
- 문자열순서바꾸기
- 배엘에서 스왑
- lastIndexOf()
Archives
- Today
- Total
코딩기록
TS) interface와 type 의 차이 본문
728x90
TypeScript에서 type과 interface는 둘 다 타입을 정의하는 역할을 하지만, 몇 가지 차이가 있음 .
1. 기본적인 차이점
type interface
용도 | 다양한 타입(객체, 유니온, 맵드 타입 등)을 정의할 때 사용 | 객체의 구조(프로퍼티와 메서드)를 정의할 때 사용 |
확장(상속) | &(인터섹션)으로 확장 | extends 키워드로 확장 |
중복 선언 가능 여부 | ❌ 불가능 (덮어쓰기 됨) | ✅ 가능 (자동으로 병합됨) |
유니온 타입 지원 | ✅ 가능 | ❌ 불가능 |
맵드 타입 지원 | ✅ 가능 | ❌ 불가능 |
2. 타입 상속(확장) 방식 비교
(1) interface의 확장 (extends)
인터페이스는 extends 키워드를 사용하여 확장할 수 있음.
interface Person {
name: string;
age: number;
}
interface Employee extends Person {
jobTitle: string;
}
const employee: Employee = {
name: "Alice",
age: 30,
jobTitle: "Developer",
};
✅ extends를 사용하면 기존 인터페이스를 확장하여 새로운 인터페이스를 만들 수 있음
(2) type의 확장 (인터섹션 &)
type을 확장할 때는 &(인터섹션)을 사용.
type Person = {
name: string;
age: number;
};
type Employee = Person & {
jobTitle: string;
};
const employee: Employee = {
name: "Alice",
age: 30,
jobTitle: "Developer",
};
✅ &를 사용하여 여러 타입을 합칠 수 있음
3. 중복 선언 가능 여부
(1) interface는 자동 병합(O)
interface User {
name: string;
}
interface User {
age: number;
}
const user: User = {
name: "John",
age: 25,
}; // 정상 동작
✅ 동일한 interface 이름을 중복 선언하면 자동으로 병합됨
(2) type은 중복 선언 불가(X)
type User = {
name: string;
};
type User = {
age: number;
}; // ❌ 오류: 중복된 타입 선언 불가
❌ type은 같은 이름으로 두 번 선언할 수 없음
4. type만 가능한 기능
(1) 유니온 타입 사용 가능
type Status = "success" | "error" | "loading";
✅ type은 유니온 타입을 정의할 수 있지만, interface는 불가능함.
(2) 맵드 타입 사용 가능
type ReadonlyUser = {
readonly [K in "id" | "name" | "email"]: string;
};
✅ type은 맵드 타입을 활용하여 동적으로 타입을 생성할 수 있음.
결론: 언제 type과 interface를 사용할까?
상황 추천
객체 타입 정의 | interface (가독성 & 확장성 좋음) |
확장(상속)해야 하는 경우 | interface (extends 지원, 병합 가능) |
유니온 타입, 맵드 타입이 필요할 때 | type (더 유연함) |
여러 타입을 합칠 때 | type (& 인터섹션 사용) |
요약
- **interface**는 객체의 구조를 정의하고 확장(상속)에 강함. (extends 지원, 자동 병합)
- **type**은 유니온, 맵드 타입, 인터섹션 등 더 유연한 타입을 정의할 수 있음.
- 단순한 객체 타입 정의라면 interface, 다양한 타입 조합이 필요하다면 type을 사용하면 좋음! 😊
참고 쳇지피티, 제로베이스강의
반응형
'프론트 > 리액트' 카테고리의 다른 글
TS) 타입가드 Type Guard (0) | 2025.02.15 |
---|---|
vscode로 리액트 타입스트립트 프로젝트 만들기1 - 셋팅 설정파일들 package.json, .eslintrc.js, tsconfig.json, prettierrc.js, reportWebVitals.ts (1) | 2025.02.07 |
vscode로 리액트 타입스트립트 프로젝트 만들기2 - 서비스 만들기 메인 코드 (0) | 2025.02.07 |
vscode로 eslint + prettier + 리액트 타입스크립트 프로젝트 생성 (2) | 2025.02.04 |
TS) Vite로 React + TypeScript 템플릿 생성 (0) | 2025.02.03 |
Comments