동적 타입과 정적 타입
타입 체커가 컴파일 타임에 수행되는지 런타임에 수행되는지 여부
- 개발환경(타입체커) vs. 배포환경(컴파일러)
- ts-loader vs. babel-loader
- tsserver
- tsc
- 자바스크립트는 인터프리터 언어
정적 타입
- 개발자가 타입을 명시적으로 타이핑 ex) Java, C#, C++
- 타입 체커와 타입 추론을 통해 일부 타이핑 생략 가능 ex) TypeScript, Scala, Haskell
- 보다 빠르게 오류 캐치 가능
- 자동 완성을 통해 데이터 타입 혹은 속성에 대한 확신 가질 수 있음
동적 타입
구조적 타입과 명목적 타입
타입스크립트가 타입을 이해하는 방법에 대한 이야기
구조적 타입 (Structural Type)
Duck Type, 타입의 상하 관계
- 객체가 어떤 속성들을 가지는지 즉 구조를 기준으로 타입을 따짐
- JavaScript
- 사실 타입스크립트의 타입은 집합의 일부일 수 있다 (집합 관계를 따짐)
any
가 모든 타입에 호환되는 이유는 언어 차원에서 만들어 준 백 터널이긴 하지만 최상위 타입이기 때문
명목적 타입 (Nominal Type)
- 각 타입이 고유하다는 것 즉 동일한 타입이나 데이터가 있더라도 타입을 공유할 수 없다
- 이름 기반으로 타입을 따짐
- 작성한 타입이 런타임에 존재
- C#, Java
덕 타이핑(Duck Typing)
타입스크립트의 타입 시스템은 구조적
- 타입의 생김새가 오리와 같다며 오리의 타입
- 거위가 오리와 같은 속성을 가지고 있다면 그것도 오리의 타입
- 동적 타입 이야기를 할 때 언급됨