StudyForYou / ouahhan-typescript-with-react

우아한 타입스크립트 with 리액트 스터디 레포 🧵
4 stars 0 forks source link

#3 [2장_2] 타입과 변수를 같은 이름으로 정의할 수 있습니다. 그 이유는 무엇일까요? #15

Closed hyeyoonS closed 3 months ago

hyeyoonS commented 3 months ago

❓문제

타입과 변수를 같은 이름으로 정의할 수 있습니다. 그 이유는 무엇일까요?

🎯답변

예외)

Class

class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

const rect1 = new Rectangle(5, 4);
class Developer {
  name: string;

  domain: string;

  constructor(name: string, domain: string) {
    this.name = name;
    this.domain = domain;
  }
}

const me: Developer = new Developer("zig", "frontend"); 

변수명 me 뒤에 등장하는 : Developer에서 Developer는 타입에 해당하지만, new 키워드 뒤의 Developer는 클래스의 생성자 함수인 값으로 동작합니다.

⇒ 타입스크립트에서 클래스는 타입 애너테이션으로 사용할 수 있지만, 런타임에서 객체로 변환되어 자바스크립트의 값으로 사용되는 특징을 가지고 있습니다.

qooktree1 commented 3 months ago

ps. 타입스크립트가 런타임에 어떤 식으로 동작하는지 알아보며 들었던 생각을 말씀드리겠습니다.

런타임에 타입스크립트는 enum가 같은 특수한 타입 시스템을 제외하고 객체로 남지 않고 모두 사라집니다. 이를 통해 컴파일 과정을 거치게 되면 타입 정보들은 JavaScript 파일에 포함되지 않고 메모리에는 JavaScript의 값 및 객체들만 존재한다고 생각되어 타입과 변수를 같은 이름으로 정의해도 오류가 발생하지 않는다고 생각합니다.