두 메커니즘인 interface와 type alias는 데이터 구조(객체, 함수, 복잡한 타입)를 설명하는 데 사용됩니다.
차이점:
|) 및 인터섹션(&).예시:
interface Animal { name: string } interface Dog extends Animal { bark(): void } // 타입 별칭으로 타입 결합: type MyType = string | number type Cat = Animal & { purr(): void }
권장 사항:
interface를 사용하세요.type을 사용하세요.질문: 다른 파일에서 타입 별칭으로 정의된 타입에 새로운 필드를 추가할 수 있을까요?
답변:
아니요. 타입 별칭은 다른 파일에서 선언적으로 확장할 수 없으며, 인터페이스와는 다릅니다.
예시:
// main.ts type User = { name: string } // another.ts type User = { age: number } // 오류: 중복 식별자 // 인터페이스: // main.ts interface User { name: string } // another.ts interface User { age: number } // ok, User = { name: string, age: number }
이야기
큰 프로젝트에서 공통 데이터 구조를 타입 별칭으로 정의했습니다. 다른 패키지의 기존 타입에 필드를 추가해야 할 때, 타입 별칭이 선언 병합을 지원하지 않아 인터페이스로 다시 작성해야 했고, 이것이 지연을 초래했습니다.
이야기
한 개발자가 인터페이스를 통해 함수를 설명한 후, 유니언 타입(문자열 또는 함수)을 추가하려고 했습니다. 이로 인해 인터페이스가 이 경우에 적합하지 않다는 것을 알게 되었고, 모든 정의를 타입 별칭으로 변경해야 했습니다.
이야기
인터페이스에서 타입 별칭으로 변경하면서 확장 구문을 혼동했습니다:
&통해 결합하는 대신extends를 사용하려 했습니다. 오류가 나중에 발생했으며, 그 원인을 즉시 이해하지 못했습니다.