이것은 UMD module declaration입니다.
아직 익숙하지 않은 경우, UMD는 같은 자바 스크립트 라이브러리가 전역 변수 (어디서나 액세스 할 수있는 하나)으로 사용하거나 할 수있는 생성 패턴입니다 모듈 (하나 런타임에 특별히로드 됨).
많은 라이브러리가 UMD 패턴으로 기록됩니다. 예를 들어, 브라우저에서
moment.parse("12-31-2017")
을 쓸 수 있습니다,하지만 Node.js를이 같은 코드를 작성 : 당신이 export function parse
같은 export
선언을 쓸 때
const m = require("moment");
m.parse("12-31-2017")
가, 타이프 라이터 당신이를 설명하고 알고 모듈은 두 번째 코드 블록과 같습니다.
export as namespace the_global_identifier;
일부 UMD 라이브러리 항상이 생성됩니다 : 라이브러리는 또한 전역 변수를 생성하기위한 .d.ts 파일을 작성하는 경우에, 당신은 UMD 모듈 선언 구문을 사용하여 해당 전역 변수를 설명 할 수 있습니다 반면에 은 모듈 시스템이있는 환경에서로드되는 경우을 가져와야합니다. 일반적으로 라이브러리는 사용하는 동작을 명확하게 문서화하지 않습니다. 즉, 선언 파일 작성자는 예상되는 문자를 실제로 알지 못합니다. 즉, TypeScript는 보수적이며 만 참조하는 파일이 이 아닌 경우 전역 식별자에 대한 액세스를 허용합니다. 모듈.
당신이 선언 파일을 작성하고 다음과 같이 패턴을 확인, 그들은 라이브러리 UMD인지 아닌지 확실하지 않은 경우 :
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.mymodule = global.mymodule || {})));
}(this, function (exports) { 'use strict';
function myFunction() {
console.log('hello world');
}
}));
이 고자질 UMD 냄새입니다 : 많은 typeof
은 "exports", "module"및 "define"을 검사 한 다음 큰 함수 본문에 지정된 "exports"매개 변수에 할당합니다. 라이브러리 코드에서 이것을 보지 않는다면 거의 UMD 모듈이 아니며 이 아닌은 export as namespace
선언을 작성해야합니다.