옹재
소소한 개발 블로그
옹재
전체 방문자
오늘
어제
  • 분류 전체보기 (66)
    • 개발 관련 서적 스터디 (6)
    • 프론트엔드 스터디 (36)
      • Javascript (16)
      • Typescript (13)
    • Vue 스터디 (22)
    • 개발 관련 스터디 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • scss
  • 프론트엔드 스터디
  • 프레임워크 없는 프론트엔드 개발
  • 개발서적 스터디
  • CSS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
옹재

소소한 개발 블로그

프론트엔드 스터디/Typescript

[TypeScript] 기초 - 타입 앨리어스(Type Alias)

2021. 7. 21. 16:13
728x90
반응형

타입 앨리어스(Type Alias)

타입 앨리어스는 새로운 타입을 정의합니다. 타입으로 사용할 수 있다는 점에서 인터페이스와 유사합니다.

interface Person {
  name: string,
  age?: number
}

// 빈 객체를 Person 타입으로 지정
const person = {} as Person;
person.name = 'Lee';
person.age = 20;
person.address = 'Seoul'; // Error

// 타입 앨리어스
type Person = {
  name: string,
  age?: number
}

// 빈 객체를 Person 타입으로 지정
const person = {} as Person;
person.name = 'Lee';
person.age = 20;
person.address = 'Seoul'; // Error

하지만 타입 앨리어스는 원시값, 유니온 타입, 튜플 등도 타입으로 지정할 수 있습니다.

// 문자열 리터럴로 타입 지정
type Str = 'Lee';

// 유니온 타입으로 타입 지정
type Union = string | null;

// 문자열 유니온 타입으로 타입 지정
type Name = 'Lee' | 'Kim';

// 숫자 리터럴 유니온 타입으로 타입 지정
type Num = 1 | 2 | 3 | 4 | 5;

// 객체 리터럴 유니온 타입으로 타입 지정
type Obj = {a: 1} | {b: 2};

// 함수 유니온 타입으로 타입 지정
type Func = (() => string) | (() => void);

// 인터페이스 유니온 타입으로 타입 지정
type Shape = Square | Rectangle | Circle;

// 튜플로 타입 지정
type Tuple = [string, boolean];
const t: Tuple = ['', '']; // Error

Type vs Interface

인터페이스는 extends 또는 implements 될 수 있지만 타입 앨리어스는 그럴 수 없습니다. 즉, 상속을 통해 확장이 필요하다면 인터페이스가 유리합니다.
하지만 인터페이스로 표현할 수 없거나 유니온 또는 튜플을 사용해야한다면 타입 앨리어스를 사용하는 편이 유리합니다.

interface PeopleInterface {
  name: string
  age: number
}

interface StudentInterface extends PeopleInterface {
  school: string
}

type PeopleType = {
  name: string
  age: number
}

type StudentType = PeopleType & {
  school: string
}

또한 인터페이스에서 할 수 있는 대부분의 기능들은 타입 앨리에스에서 가능하지만, 타입은 새로운 속성을 추가하기 위해서 다시 같은 이름으로 선언할 수 없지만 인터페이스는 항상 선언적 확장이 가능합니다.

interface Window {
  title: string
}

interface Window {
  ts: TypeScriptAPI
}

// 같은 interface 명으로 Window를 다시 만든다면, 자동으로 확장이 된다.

const src = 'const a = "Hello World"'
window.ts.transpileModule(src, {})

type Window = {
  title: string
}

type Window = {
  ts: TypeScriptAPI
}

// Error: Duplicate identifier 'Window'.
// 타입은 안된다.

 

728x90
반응형

'프론트엔드 스터디 > Typescript' 카테고리의 다른 글

[Typesciprt] tsconfig.json 살펴보기  (0) 2021.10.13
[TypeScript] 타입 가드(Type Guard)  (0) 2021.07.21
[TypeScript] 기초 - 타입 추론(Type Inference)  (0) 2021.07.21
[TypeScript] 기초 - 제네릭(Generic)  (0) 2021.07.21
[TypeScript] 기초 - 교차 타입(Intersection Type)  (0) 2021.07.21
    '프론트엔드 스터디/Typescript' 카테고리의 다른 글
    • [Typesciprt] tsconfig.json 살펴보기
    • [TypeScript] 타입 가드(Type Guard)
    • [TypeScript] 기초 - 타입 추론(Type Inference)
    • [TypeScript] 기초 - 제네릭(Generic)
    옹재
    옹재

    티스토리툴바