사용자 도구

사이트 도구


typescript:type_compatibility

문서의 이전 판입니다!


Type Compatibility

Introduction

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라이브러리에서 발견되는 관계의 종류를 표현하는 것이 훨씬 자연 스럽습니다.

Note on Soundness

TypeScript의 타입 시스템을 사용하면 컴파일 타임에 알 수없는 특정 작업을 수행할 수 있습니다. 하지만 타입 시스템에 이 프로퍼티가 있으면 건전하지 않습니다. TypeScript는 건전하지 않는 동작을 허용하는 장소를 신중하게 고려했으며, 이 문서 전체에서 이러한 상황이 발생하는 곳과 그 뒤에있는 동기 부여 시나리오에 대해 설명합니다.

typescript/type_compatibility.1564386252.txt.gz · 마지막으로 수정됨: 2025/04/15 10:05 (바깥 편집)