앰비언트 선언도 선언병합이 된다.
앰비언트 선언 (declare)
타입 정보만 제공하는 선언
실제 구현이 존재하지 않는 코드의 타입을 정의 (코드 구현부 없음)
외부 라이브러리의 타입을 알리는데 사용됨
즉, 외부 라이브러리를 가져다 쓰는데 자바스크립트로만 된 코드의 경우 직접 타이핑 해야할 때 사용
declare
예약어를 사용
declare
로 앰비언트 선언할 때는 반드시 해당 값이 실제로 존재함을 확인해야 한다.
타입스크립트에서 선언할 수 있는 타입으로는
네임스페이스
,클래스
,enum
,인터페이스
,타입 별칭
,함수
,변수
이들은 선언할 때 네임스페이스나 타입 또는 값으로 사용될 수 있다.
유형
네임스페이스
타입
값
네임스페이스
⭕️
⭕️
클래스
⭕️
⭕️
enum
⭕️
⭕️
인터페이스
⭕️
타입 별칭
⭕️
함수
⭕️
변수
⭕️
같은 이름의 다른 선언과 병합 가능 여부
병합 가능 여부
네임스페이스
클래스
enum
인터페이스
타입 별칭
함수
변수
네임스페이스
⭕️
⭕️
⭕️
⭕️
⭕️
⭕️
⭕️
클래스
⭕️
❌
❌
⭕️
❌
⭕️
❌
enum
⭕️
❌
⭕️
❌
❌
❌
❌
인터페이스
⭕️
⭕️
❌
⭕️
❌
⭕️
⭕️
타입 별칭
⭕️
❌
❌
❌
❌
⭕️
⭕️
함수
⭕️
⭕️
❌
⭕️
⭕️
⭕️
❌
변수
⭕️
❌
❌
⭕️
⭕️
❌
❌
선언 병합을 활용하면 좋은 예
클래스의 new 연산자를 사용하지 않고 생성하게 만드는 코드
declare로 앰비언트 선언한 타입도 병합됨
앰비언트 선언한 타입과 그렇지 않은 타입끼리도 병합된다.
함수에 속성이 별도로 있다는걸 알리고 싶은 경우
JS에서 함수도 객체이므로 함수에 속성을 추가할 수 있음
함수와 네임스페이스가 병합될 수 있으므로 아래 코드에서 에러가 발생하지 않음
함수에 속성이 별도로 있다는걸 알리고 싶은 경우 함수와 동일한 이름의 namespac를 추가하면 된다.
Last updated