-
(TypeScript) - 인터페이스개발/TypeScript 2025. 8. 25. 10:59반응형
■ 인터페이스
: 상호간에 약속된 규칙
객체 구조 정의하는데 특화된 문법 (상속, 합침 등)
interface Person { readonly name: string; age?: number; sayHi: () => void; } const person: Person = { name: '송송송', sayHi: function () { console.log('hi'); }, };인터페이스는 타입별칭과 타입 정의하는 것은 비슷하다.
? 를 사용하여 선택적 프로퍼티도 받을 수 있으며,
함수형으로 sayHi: () => void; 처럼 화살표 함수로 받거나
또는 sayHi(): void; 처럼 호출 시그니처로 받을 수 있다.
인터페이스로 받을때는 기본적인 호출 시그니처와 다르게 메서드 이름이 sayHi() 처럼 변수 앞에 붙는다.
그렇다면 왜 다를까?
type Func = { (): void; }; const func: Func = () => { console.log('func'); };이전에 우리가 배운 호출 시그니처는 다음과 같이
함수 매개변수와 반환값을 정해주는 말 그대로 함수 타입을 정의하는 타입이다.
즉 () 매개변수 아무것도 안받고, 반환값이 void 아무것도 반환하지 않은 것이다.
interface Person { readonly name: string; age?: number; (): void; }const person: Person = { name: '송송송', sayHi: function () { console.log('hi'); }, };근데 만약 여기 코드를 ():void 로 받아서 호출 시그니처 처럼 () 만 사용하면
두 번째 Person 자체가 함수값을 정의하는 것이 된다.
따라서 해당 person은 함수가 아니라 오류가 난다.
즉, 인터페이스 프로퍼티를 정의할 때는 앞에 함수에 해당하는 변수명을 적어주면 된다.
person.sayHi(); person.sayHi(1, 2);sayHi(): void; sayHi(a:number, b:number): void;다음과 같이 인터페이스에 오버로드 프로퍼티 설정을 위해서는
함수 타입 표현식이 아니라 호출 시그니처를 사용해주면 된다.
함수 타입 표현식은 두 개의 프로퍼티 작성하면 동일 변수명으로 오류가 뜨기 때문이다.
type Type1 = number | string; type Type2 = number & stringconst person: Person | number = { name: '송송송', sayHi: function () { console.log('hi'); }, };인터페이스는 기존 객체 정의와는 다르게
유니온 타입(합집합)과 인터섹션(교집합)이 불가능하다.
따라서 type 으로 유니온, 인터섹션을 이용하거나
Person | number 와 같이 인터페이스 말고 타입 자체를 유니온 또는 인터섹션 타입으로 받아야 한다.
※ 참고
- 인터페이스를 정할 때 변수명에 I를 붙이는 경우도 종종 있다. = 헝가리안 표기법 (팀 표기법을 따르는 걸 추천!)
- JavaScript 는 _ 를 쓰는 스네이크 표기법이나,
userName 과 같은 카멜 표기법,
UserName 모두 대문자 표시인 파스칼 표기법을 한다.
반응형'개발 > TypeScript' 카테고리의 다른 글
(TypeScript) - 인터페이스 선언 합치기 (0) 2025.08.25 (TypeScript) - 인터페이스 확장 (0) 2025.08.25 (TypeScript) - 사용자 정의 타입 가드 (커스텀 타입 가드) (0) 2025.08.22 (TypeScript) - 함수 오버로딩 (0) 2025.08.22 (TypeScript) - 함수 타입의 호환성 (0) 2025.08.22