문서의 이전 판입니다!
TypeScript의 타입호환성은 구조적인 하위타입(structural subtyping)을 기반으로 합니다. structual typing은 멤버에게만 의존하여 Type을 연관시키는 방법입니다. 이는 일반적인 타입핑과는 대조적입니다.
TypeScript의 타입정보는 단지 컴파일 타임에만 존재한다.
interface Named { name: string; } class Person { name: string; } let p: Named; p = new Person(); // OK, beacuse of structual typing
Person클래스가 Named인터페이스의 구현체라고 명시적으로 기술하지 않았기 때문에 C#, Java와 같은 명목적 선언 언어에서는 위와 같은 코드는 오류가 발생한다.
TypeScript의 structural type system은 일반적으로 Javascript코드가 작성된 방식에 따라 설계되었습니다. JavaScript는 함수표현식 및 객체 리터럴과 같은 익명 객체를 광범위하게 사용하기 때문에 일반 타입 시스템 대신에 structual type system을 사용하여 JavaScript라이브러리에서 발견되는 관계의 종류를 표현하는 것이 훨씬 자연 스럽습니다.
TypeScript의 타입 시스템을 사용하면 컴파일 타임에 알 수없는 특정 작업을 수행할 수 있습니다. 하지만 타입 시스템에 이 프로퍼티가 있으면 건전하지 않습니다. TypeScript는 건전하지 않는 동작을 허용하는 장소를 신중하게 고려했으며, 이 문서 전체에서 이러한 상황이 발생하는 곳과 그 뒤에있는 동기 부여 시나리오에 대해 설명합니다.