독립 가능한 기능의 단위
모듈을 식별하는 것
모듈을 분리하는 것
모듈을 외부에 공개하는 것
모듈을 불러온다, 만약에 JS에서 TS에서 사용하는 타입정보를 불러온다면 자동으로 소멸된다.
ex) import as THREE from "three";*
모듈을 외부에서 호출할 수 있게 해준다.
export 모듈
default export 모듈
export { 모듈1, 모듈2 }
export { 별칭1 as 모듈1, 별칭2 as 모듈2 ... }
export namespace 모듈1
변수, 상수, 함수, 클래스가 어딘가에 선언이 이미 되어있다는 의미이다.
엠비언트 컨텍스트(Ambient Context) :are module 모듈명 {} , 현재는x )
namespace에 declare를 사용하여
js로 컴파일되지 않게하고 타입의 정보만을 보내주는 용도로 사용한다.
다른 이름으로는 내부모듈 혹은 엠비언트 네임스페이스라고 한다.
declare module( declare module "모듈명" {
컴파일의 대상이 된다면 타입정보를 참조할 수 있게 해준다. export를 붙인 필드만 외부에서 참조가 가능하다
다른 이름으로는 외부 모듈 혹은 앰비언트 모듈이라 한다.
declare global
declare const window: typeof globalThis & {
kakao: any;
}
js 일반 객체로 컴파일이 된다.
네임스페이스는 전역 스코프에 속해있지만 독립된 이름 공간을 가진다.
프로젝트에서 벗어난 라이브러리 모듈을 구성하는데 좋다고 한다.
객체로 만들고 객체 내부에 원하는 값들만 export로 사용을 할 수 있게 허용도 가능한것 같다.
iife 함수에 해당객체를 전달하고 그 함수를 즉시 호출하는 방식으로 컴파일된다.
네임스페이스 내부에서는 외부에서 접근이 불가능한데 export를 사용하여 외부에서 사용을 할 수 있게 해준다.
네임스페이스.계층1
.을 이용하여 네임스페이스 간 계층을 만들어 줄 수 있다.
타입스크립트에서 사용하는 파일로 타입의 선언을 작성하는 공간이다.
선언코드만 작성을 하고 일반코드는 작성하지 않는다
최상단 상수,변수,함수 등에는 declare나 export를 해주어서 타입만을 선언할수 있는 용도로 사용할 수 있게 해준다.
skipLibChck=false 위의 2가지 설정을 강제로 하게 한다.
declare module이나 declare namespace에 export를 생략해도 된다.
export as namespace
하나의 네임스페이스로 묶어서 외부로 export시키는 방법
전역 참조로 가능하게 해주어서 따로 코드를 불러올 필요가 없다.