๊ฐ์ (Overview)
์ผ๋ฐ์ ์ผ๋ก, ์ ์ธ ํ์ผ์ ๊ตฌ์กฐํํ๋ ๋ฐฉ๋ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. JavaScript์์ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๊ณ , ์ด์ ๋ง์ถ์ด ์ ์ธ ํ์ผ์ ์์ฑํด์ผ ํฉ๋๋ค. ์ด ๊ฐ์ด๋๋ ์ผ๋ฐ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจํด์ ์๋ณํ๋ ๋ฐฉ๋ฒ๊ณผ, ๊ทธ ํจํด์ ์์ํ๋ ์ ์ธ ํ์ผ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃน๋๋ค.
์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๊ฐ์ ๊ตฌ์กฐํ ํจํด ์ ํ์ ํ ํ๋ฆฟ ์น์ ์ ์์ต๋๋ค. ์ด ํ ํ๋ฆฟ์ผ๋ก ์์ํ๋ฉด ๋ ๋น ๋ฅด๊ฒ ์งํํ ์ ์์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ข ๋ฅ ์๋ณํ๊ธฐ (Identifying Kinds of Libraries)
์ฒซ ๋ฒ์งธ๋ก, TypeScript ์ ์ธ ํ์ผ์ด ๋ํ๋ผ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ข ๋ฅ๋ฅผ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค. ๊ฐ ์ข ๋ฅ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ, ์์ฑํ๋ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์์ ๋ฅผ ๋ณผ ๊ฒ์ ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์๋ณํ๋ ๊ฒ์ ์ ์ธ ํ์ผ์ ์์ฑํ๋ ์ฒซ ๋จ๊ณ์ ๋๋ค. ์ฌ์ฉ๋ฒ๊ณผ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ์๋ณํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์์ ๊ตฌ์ฑ์ ๋ฐ๋ผ์, ์ด๋ค ๊ฑด ๋ค๋ฅธ ๊ฒ๋ณด๋ค ํจ์ฌ ์ฌ์ธ ์ ์์ต๋๋ค. ๋ณธ์ธ์๊ฒ ๋ ํธํ ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
์ด๋ค ์ฌํญ์ ๊ณ ๋ คํด์ผ ํ๋๊ฐ? (What should you look for?)
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์, ๋ค์ ์ฌํญ์ ๊ณ ๋ คํด ๋ณผ ์ ์์ต๋๋ค.
-
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด๋ก๋ํ๋ ๋ฐฉ์์ด ๋ฌด์์ธ๊ฐ?
์๋ฅผ ๋ค์ด, npm์ผ๋ก๋ง ๋ค์ด๋ก๋ ํ ์ ์๋๊ฐ? ์๋๋ฉด CDN ์์๋ง ๋ค์ด๋ก๋ ํ ์ ์๋๊ฐ?
-
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ํฌํธํ๋ ๋ฐฉ์์ด ๋ฌด์์ธ๊ฐ?
์ ์ญ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ธ๊ฐ? ์๋๋ฉด
require๋๋import/export๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ธ๊ฐ?
์ฌ๋ฌ ์ข ๋ฅ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ฐ๋จํ ์ํ
๋ชจ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (Modular Libraries)
์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋ ๋ก๋ ํ๊ฒฝ์์๋ง ๋์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, express๋ Node.js์์๋ง ๋์ํ๊ณ ๋ฐ๋์ CommonJS์ require ํจ์๋ก ๋ก๋๋์ด์ผ ํฉ๋๋ค.
ECMAScript 2015 (ES2015, ECMAScript 6, ES6๋ก๋ ์ ์๋ ค์ง), CommonJS์ RequireJS๋ ๋ชจ๋์ importingํ๋ ๋น์ทํ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. JavaScript์ CommonJS (Node.js)๋ฅผ ์๋ฅผ ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค
jsvar fs = require("fs");
TypeScript๋ ES6์์๋, import ํค์๋๊ฐ ๊ฐ์ ๋ชฉ์ ์ ์ ๊ณตํฉ๋๋ค:
tsimport fs = require("fs");
์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์์์ ๋ค์ ์ฝ๋๋ค ์ค ํ๋๋ฅผ ๋ณผ ์ ์์ต๋๋ค:
jsvar someLib = require('someLib');
ํน์
jsdefine(..., ['someLib'], function(someLib) {});
์ ์ญ ๋ชจ๋๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก UMD ๋ชจ๋์ ๋ฌธ์์์๋ ์ด ์์ ๋ค์ ๋ณผ ์ ์์ผ๋ฏ๋ก, ์ฝ๋๋ ๋ฌธ์๋ฅผ ๋ฐ๋์ ํ์ธํ์ธ์.
์ฝ๋์์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ณํ๊ธฐ (Identifying a Module Library from Code)
๋ชจ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ์ค ๋ช ๊ฐ์ง๋ฅผ ๋ฐ๋์ ๊ฐ์ง๊ณ ์์ต๋๋ค:
requireํน์define์ ๋ํ ๋ฌด์กฐ๊ฑด์ ์ธ ํธ์ถimport * as a from 'b';ํน์export c;๊ฐ์ ์ ์ธ๋ฌธexportsํน์module.exports์ ๋ํ ํ ๋น
๋ค์์ ๊ฑฐ์ ๊ฐ์ง ์์ต๋๋ค:
windowํน์globalํ๋กํผํฐ ํ ๋น
๋ชจ๋์ ์ํ ํ ํ๋ฆฟ (Templates For Modules)
๋ชจ๋์ ์ํ ๋ค ๊ฐ์ง ํ ํ๋ฆฟ์ด ์์ต๋๋ค.
๊ฐ๊ฐ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง์ ๋ํ ๊ฐ์๋ module.d.ts๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ง์ฝ ๋ชจ๋์ ํจ์์ฒ๋ผ ํธ์ถํ ์ ์์ผ๋ฉด module-function.d.ts์ ์ฌ์ฉํ์ธ์:
jsconst x = require("foo");// ์ฐธ๊ณ : ํจ์๋ก 'x'๋ฅผ ํธ์ถconst y = x(42);
๋ง์ฝ ๋ชจ๋์ด new๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์ ์๋ค๋ฉด module-class.d.ts๋ฅผ ์ฌ์ฉํ์ธ์:
jsconst x = require("bar");// ์ฐธ๊ณ : 'new' ์ฐ์ฐ์๋ฅผ import๋ ๋ณ์์ ์ฌ์ฉconst y = new x("hello");
์ํฌํธ ๋์์ ๋ ๋ค๋ฅธ ๋ชจ๋์ ์์ ์ฌํญ์ ๋ง๋๋ ๋ชจ๋์ ์ฌ์ฉํ๋ค๋ฉด, module-plugin.d.ts ํ
ํ๋ฆฟ์ ์ฌ์ฉํ์ธ์:
jsconst jest = require("jest");require("jest-matchers-files");
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (Global Libraries)
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ญ ์ค์ฝํ (์ฆ, import ํ์์ ์ฌ์ฉํ์ง ์์)์์ ์ ๊ทผ ๊ฐ๋ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉ์ ์ํด ๊ฐ๋จํ ํ๋ ์ด์์ ์ ์ญ ๋ณ์๋ฅผ ๋
ธ์ถํฉ๋๋ค.
์๋ฅผ ๋ค์ด, jQuery๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, $ ๋ณ์๋ฅผ ์ฐธ์กฐํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
ts$(() => { console.log('hello!'); } );
HTML ์คํฌ๋ฆฝํธ ํ๊ทธ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์์์ ์ง์นจ์ ๋ณผ ์ ์์ต๋๋ค:
html<script src="http://a.great.cdn.for/someLib.js"></script>
์ค๋๋ , ๋๋ถ๋ถ์ ์ ์ญ์์ ์ ๊ทผ ๊ฐ๋ฅํ ์ ๋ช ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ค์ ๋ก UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์์ฑ๋์ด ์์ต๋๋ค (์๋๋ฅผ ์ฐธ์กฐ). UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์๋ ์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์์ ๊ตฌ๋ณํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ ์ญ ์ ์ธ ํ์ผ์ ์์ฑํ๊ธฐ ์ ์, ์ค์ ๋ก๋ UMD๊ฐ ์๋์ง ํ์ธํ์ญ์์ค.
์ฝ๋์์ ์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ณํ๊ธฐ (Identifying a Global Library from Code)
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ ๋๊ฒ ์์ฒญ ๊ฐ๋จํฉ๋๋ค. ์ ์ญ โHello, worldโ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
jsfunction createGreeting(s) {return "Hello, " + s;}
ํน์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
js// Webwindow.createGreeting = function (s) {return "Hello, " + s;};// Nodeglobal.createGreeting = function (s) {return "Hello, " + s;};// Potentially any runtimeglobalThis.createGreeting = function (s) {return "Hello, " + s;};
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, ๋ณดํต ๋ค์์ ๋ณผ ์ ์์ต๋๋ค:
- ์ต์์ ๋ ๋ฒจ
var๋ฌธ ์ด๋function์ ์ธ - ํ๋ ์ด์์
window.someNameํ ๋น - DOM ์ธํฐํ์ด์ค
documentํน์window๊ฐ ์กด์ฌํ๋ค๊ณ ๊ฐ์
๋ค์์ ๋ณผ ์ ์์ต๋๋ค:
require์ด๋define๊ฐ์ ๋ชจ๋ ๋ก๋ ๊ฒ์ฌ ํน์ ์ฌ์ฉvar fs = require("fs");ํํ์ CommonJS/Node.js-์คํ์ผ importdefine(...)ํธ์ถ- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ
requireํน์ importํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํ๋ ๋ฌธ์
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ (Examples of Global Libraries)
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฐ๊พธ๋๊ฒ ์ฝ๊ธฐ ๋๋ฌธ์, ์ ์ญ ์คํ์ผ๋ก ์์ฑํ ์ธ๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฑฐ์ ์์ต๋๋ค. ํ์ง๋ง, ํฌ๊ธฐ๊ฐ ์๊ณ DOM์ด ํ์ํ (ํน์ ์์กด์ฑ์ด ์๋) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ ํ ์ ์ญ์ ๋๋ค.
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ ํ๋ฆฟ (Global Library Template)
ํ
ํ๋ฆฟ ํ์ผ global.d.ts์ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ myLib๋ฅผ ์ ์ํฉ๋๋ค.
โ์ด๋ฆ ์ถฉ๋ ๋ฐฉ์งโ ๊ฐ์ฃผ๋ฅผ ๋ฐ๋์ ์ฝ์ด๋ณด์ธ์.
UMD
UMD ๋ชจ๋์ ๋ชจ๋๋ก (import๋ฅผ ํตํด) ์ฌ์ฉํ ์ ์๊ณ ํน์ ์ ์ญ์ผ๋ก๋ (๋ชจ๋ ๋ก๋ ์๋ ํ๊ฒฝ์์ ์คํ๋ ๋) ์ฌ์ฉํ ์ ์์ต๋๋ค. Moment.js ๊ฐ์ ๋ง์ ์ ๋ช ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ด ๋ฐฉ๋ฒ์ผ๋ก ์์ฑ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Node.js๋ RequireJS๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค:
tsimport moment = require("moment");console.log(moment.format());
๋ฐ๋ฉด ๋ฐ๋๋ผ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ธ ์ ์์ต๋๋ค:
jsconsole.log(moment.format());
UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ณํ๊ธฐ (Identifying a UMD library)
UMD modules์ ๋ชจ๋ ๋ก๋ ํ๊ฒฝ ์ ๋ฌด๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ด๋ ์ฐพ๊ธฐ ์ฌ์ด ํจํด์ ๋๋ค:
js(function (root, factory) {if (typeof define === "function" && define.amd) {define(["libName"], factory);} else if (typeof module === "object" && module.exports) {module.exports = factory(require("libName"));} else {root.returnExports = factory(root.libName);}}(this, function (b) {
๋ง์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋, ํนํ ํ์ผ ์๋จ์์ typeof define, typeof window ํน์ typeof module์ ๋ํ ํ
์คํธ๋ฅผ ๋ณด์๋ค๋ฉด, ๊ฑฐ์ ๋๋ถ๋ถ UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์์์๋ require๋ฅผ ๋ณด์ฌ์ฃผ๋ โNode.js์์ ์ฌ์ฉํ๊ธฐโ ์์ ๋ฅผ ์ข
์ข
์ค๋ช
ํ๊ณ
โ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ๊ธฐโ ์์ ์์๋ <script> ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ (Examples of UMD libraries)
์ ๋ช ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ถ๋ถ์ UMD ํจํค์ง๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ก๋ jQuery, Moment.js, loadash ๋ฑ ๋ ๋ง์ด ์์ต๋๋ค.
ํ ํ๋ฆฟ (Template)
module-plugin.d.ts ํ
ํ๋ฆฟ์ ์ฌ์ฉํ์ธ์.
์์กด์ฑ ์ฌ์ฉํ๊ธฐ (Consuming Dependencies)
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ช ๊ฐ์ง ์์กด์ฑ์ ๊ฐ์ง๊ณ ์์ ์ ์์ต๋๋ค. ์ด๋ฒ ์น์ ์์๋ ์ ์ธ ํ์ผ ์์ ์์กด์ฑ์ import ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ (Dependencies on Global Libraries)
๋ง์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กด์ฑ์ด ์๋ค๋ฉด, /// <reference types="..." /> ๋๋ ํฐ๋ธ๋ฅผ ์ฌ์ฉํ์ธ์:
ts/// <reference types="someLib" />function getThing(): someLib.thing;
๋ชจ๋ ์์กด์ฑ (Dependencies on Modules)
๋ง์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ชจ๋์ ์์กด์ฑ์ด ์๋ค๋ฉด, import๋ฌธ์ ์ฌ์ฉํ์ธ์:
tsimport * as moment from "moment";function getThing(): moment;
UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ (Dependencies on UMD libraries)
์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ (From a Global Library)
๋ง์ฝ ์ ์ญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ UMD ๋ชจ๋์ ์์กด์ฑ์ด ์๋ค๋ฉด, /// <reference types ๋๋ ํฐ๋ธ๋ฅผ ์ฌ์ฉํ์ธ์:
ts/// <reference types="moment" />function getThing(): moment;
๋ชจ๋์ด๋ UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ (From a Module or UMD Library)
๋ง์ฝ ๋ชจ๋์ด๋ UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กด์ฑ์ด ์๋ค๋ฉด, import๋ฌธ์ ์ฌ์ฉํ์ธ์:
tsimport * as someLib from 'someLib';
UMD ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์์กด์ฑ ์ ์ธ์ /// <reference ๋๋ ํฐ๋ธ๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์!
๊ฐ์ฃผ (Footnotes)
์ด๋ฆ ์ถฉ๋ ๋ฐฉ์งํ๊ธฐ (Preventing Name Conflicts)
์ ์ญ ์ ์ธ ํ์ผ์ ์์ฑํ ๋, ์ ์ญ ์ค์ฝํ์ ๋ง์ ํ์ ์ ์ ์ํ ์ ์๋ค๋ ์ ์ ์ ์ํ์ธ์. ๋ง์ ์ ์ธ ํ์ผ์ด ํ๋ก์ ํธ ๋ด์ ์์ ๋, ํด๊ฒฐํ ์ ์๋ ์ด๋ฆ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ด๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฐ๋ผ์ผ ํ๋ ๊ฐ๋จํ ๊ท์น์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ํ ์ ์ญ ๋ณ์๊ฐ ๋ฌด์์ด๋ ํ์ ์ ๋ค์์คํ์ด์ค๋ก ์ ์ํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ญ ๊ฐ โcatsโ๋ฅผ ์ ์ํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๊ณ
tsdeclare namespace cats {interface KittySettings { }}
์ด๋ ๊ฒ ํ์ง๋ ๋ง์ธ์
ts// ์ต์์-๋ ๋ฒจ์์interface CatsKittySettings { }
์ด ๊ฐ์ด๋๋ ์ ์ธ ํ์ผ ์ฌ์ฉ์๊ฐ ์ค๋จํ์ง ์๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ UMD๋ก ์ ํํ ์ ์๋๋ก ํฉ๋๋ค.
ES6๊ฐ ๋ชจ๋ ํ๋ฌ๊ทธ์ธ์ ๋ฏธ์น๋ ์ํฅ (The Impact of ES6 on Module Plugins)
์ด๋ค ํ๋ฌ๊ทธ์ธ์ ๊ธฐ์กด ๋ชจ๋์ ์ต์์ export๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํฉ๋๋ค. CommonJS์ ๋ค๋ฅธ ๋ก๋์์๋ ํ์ฉ๋์ง๋ง, ES6 ๋ชจ๋์ ๋ถ๋ณํ๋ค๊ณ ๊ฐ์ฃผ๋๊ธฐ์ ์ด ํจํด์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์๋ํ๋ฉด TypeScript๋ ๋ก๋์ ๊ตฌ์ ๋ฐ์ง ์๊ธฐ์, ์ด ์ ์ฑ ์ด ์ปดํ์ผ-์๊ฐ์ ์ ์ฉ๋์ง ์์ง๋ง, ES6 ๋ชจ๋ ๋ก๋๋ก ์ ํํ๋ ค๋ ๊ฐ๋ฐ์๋ ์๊ณ ์์ด์ผ ํฉ๋๋ค.
๋ชจ๋ ํธ์ถ ์๊ทธ๋์ฒ์ ES6๊ฐ ๋ฏธ์น๋ ์ํฅ (The Impact of ES6 on Module Call Signatures)
Express์ ๊ฐ์ ๋ง์ ์ ๋ช ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ import ๋ ๋ ํธ์ถ ๊ฐ๋ฅํ ํจ์๋ฅผ ๋ ธ์ถํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ผ๋ฐ์ ์ธ Express ์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
tsimport exp = require("express");var app = exp();
ES6 ๋ชจ๋ ๋ก๋์์, ์ต์์-๋ ๋ฒจ ๊ฐ์ฒด(์ฌ๊ธฐ์์๋ exp๋ก import)๋ ํ๋กํผํฐ๋ง ๊ฐ์ง ์ ์์ต๋๋ค;
์ต์์-๋ ๋ฒจ ๋ชจ๋ ๊ฐ์ฒด๋ ์ ๋ ํธ์ถํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํด๊ฒฐ์ฑ
์ ํธ์ถ ๊ฐ๋ฅ/์์ฑ ๊ฐ๋ฅ ๊ฐ์ฒด๋ฅผ default export๋ก ์ ์ํ๋ ๊ฒ์
๋๋ค;
์ด๋ค ๋ชจ๋ ๋ก๋ shims์ ์๋์ผ๋ก ์ด ์ํฉ์ ๊ฐ์งํ๊ณ ์ต์์-๋ ๋ฒจ ๊ฐ์ฒด๋ฅผ default export๋ก ๋ฐ๊ฟ๋๋ค.
๋ง์ฝ tsconfig.json ํ์ผ์ "esModuleInterop": true ๋ผ๊ณ ๋์ด ์์ผ๋ฉด, Typescript๊ฐ ์์ ์ฌํญ์ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.