๐ ๋ชจ๋(Module)์ด๋?
import
๋๋export
๊ฐ ์๋ ํ์ผ์ ๋ชจ๋(Module)๋ก ์ทจ๊ธ์ด ๋๋ค.- ์ฆ, ์ธ๋ถ์์๋ ์ง์ ์ ์ผ๋ก ๋ชจ๋์ ๋ถ๋ฌ์ค์ง ์๋ ์ด์ ๊ทธ ๋ชจ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
import
๋ ๋ชจ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ ๋,export
๋ ๋ชจ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ณด๋ผ ๋ ์ฌ์ฉํ๋ค.
๐ import, export ๋ฐ์ดํฐ : ๋ณ์, ์์, ํจ์, ํด๋์ค, ํ์ , ๋ค์์คํ์ด์ค
- TypeScript ์ปดํ์ผ๋ฌ๊ฐ ๋ชจ๋ ๋ก๋๋ฅผ ํตํด ์ค์ ๋ก ๋ถ๋ฌ์ค๋ ๊ฑด ์ค๋ก์ง ํ์ ์ ๋ณด๋ฟ์ด๋ค.
- ๋ณ์, ์์, ํจ์, ํด๋์ค : JS ๋ชจ๋ ๋ก๋ ์ฝ๋๋ก ์ปดํ์ผ์ด ๋๋ค.
- ํ์ : JS ์ฝ๋๋ก๋ ์ปดํ์ผ ๋์ง ์๋๋ค. ์ฆ, JS ์ฝ๋์์๋ ์ญ์ ๋๋ค.
- ๋ค์์คํ์ด์ค : JS ์ผ๋ฐ ๊ฐ์ฒด๋ก ์ปดํ์ผ ๋๋ค. IIFE ํจ์์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๊ณ ๊ทธ ํจ์๋ฅผ ์ฆ์ ํธ์ถํ๋ ์์ผ๋ก ์ปดํ์ผ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์์คํ์ด์ค ์ธ๋ถ์์ ๋ค์์คํ์ด์ค ๋ด๋ถ๋ฅผ ๋ณผ ์ ์๋๋ฐ, ์ด๋ฌํ ๋์์ IIFE ํจ์ ๋ด์์ ์ง์ญ ๋ณ์๋ฅผ ์ ์ธํ๋ฉฐ ๊ฐ์ข
์ฝ๋๋ฅผ ์คํ์ํค๋ ๋ฐฉ์์ ํตํด ๊ตฌํํ๊ฒ ๋๋ค. ๋ง์ฝ ๋ค์์คํ์ด์ค ์ธ๋ถ์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ํ๊ณ ์ถ์ ๋ฐ์ดํฐ(๋ณ์, ์์, ํจ์, ํด๋์ค, ๋ค์์คํ์ด์ค)๊ฐ ์๋ค๋ฉด
export
๋ฅผ ์ฌ์ฉํ์.
// TypeScript namespace N1 { export let a: string = 'a'; let b: string = 'b'; console.log(a); console.log(b); export namespace N2 { export let c: string = 'c'; let d: string = 'd'; console.log(c); console.log(d); } } // Compiled JavaScript "use strict"; var N1; (function (N1) { N1.a = 'a'; let b = 'b'; console.log(N1.a); console.log(b); let N2; (function (N2) { N2.c = 'c'; let d = 'd'; console.log(N2.c); console.log(d); })(N2 = N1.N2 || (N1.N2 = {})); })(N1 || (N1 = {}));
๐ declare ํค์๋
- ๋ณ์, ์์, ํจ์, ๋๋ ํด๋์ค๊ฐ ์ด๋๊ฐ์ ์ด๋ฏธ ์ ์ธ๋์ด ์์์ ์๋ฆฐ๋ค.
- ์ฆ, JS ์ฝ๋๋ก๋ ์ปดํ์ผ ๋์ง ์๊ณ , TypeScript ์ปดํ์ผ๋ฌ์๊ฒ ํ์ ์ ๋ณด๋ฅผ ์๋ฆฌ๊ธฐ๋ง ํ๋ค.
- ํ์
์ ๊ฒฝ์ฐ ์ด์ฐจํผ JS ์ฝ๋๋ก ์ปดํ์ผ ๋์ง ์์ผ๋ฏ๋ก
declare
ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค. declare
๋ธ๋ก (declare namespace
,declare module
,declare global
)- ์ฐ๋น์ธํธ ์ปจํ ์คํธ(Ambient Context)๋ก ์ ์๋๋ ์์ญ์ด๋ค.
- ์ด ์์ญ ์์์๋
declare
ํค์๋๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ถ๋๋ค. ์ฆ ๊ตณ์ด ๋ ๋ถ์ฌ์ค ํ์๊ฐ ์๋ค. - ๋ํ ์ด ์์ญ ์์์๋ ์ ์ธ ์ฝ๋๊ฐ ์๋ ์ผ๋ฐ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
declare namespace ABC
: ์๋๋๋ก๋ผ๋ฉด JS ์ผ๋ฐ ๊ฐ์ฒด๋ก ์ปดํ์ผ ๋๋ ๋ค์์คํ์ด์ค๊ฒ ์ง๋ง,declare
ํค์๋๋ฅผ ๋ถ์ฌ์ค์ผ๋ก์จ JS ์ฝ๋๋ก ์ปดํ์ผ ๋์ง ์๊ฒ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ ๋ช๋ช ํ์ ๋ค์ ์๋ฏธ์ ์ผ๋ก ๋ฌถ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค. ์ด ๋ธ๋ก์ ์ฐ๋น์ธํธ ๋ค์์คํ์ด์ค ํน์ ๋ด๋ถ ๋ชจ๋์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.declare module "ABC"
: ์ฐ๋น์ธํธ ๋ชจ๋ ์ ์ธ(Ambient Module Declaration) ํ์ผ์ ์์ฑํ๋ ๋ธ๋ก์ผ๋ก, ์ฐ๋น์ธํธ ๋ชจ๋ ํน์ ์ธ๋ถ ๋ชจ๋์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค. ์ด๋ฌํ ์ฐ๋น์ธํธ ๋ชจ๋ ์ ์ธ ํ์ผ์ ์ปดํ์ผ ๋์์ ํฌํจ๋๊ธฐ๋ง ํ๋ค๋ฉด(์๋ฅผ ๋ค์ด Triple Slash ๋๋ ํฐ๋ธ๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฐ ํด์) ๊ทธ๊ณณ์ ์ ์ธ๋ ๋ชจ๋(์ฌ๊ธฐ์๋ ABC)์ ํ์ ์ ๋ณด๋ฅผ ์ฐธ์กฐํ ์ ์๊ฒ ๋๋ค. ๋ฌผ๋ก ์ด ๋ธ๋ก๋ ๋ค์์คํ์ด์ค์ ๋ง์ฐฌ๊ฐ์ง๋กexport
๋ฅผ ๋ถ์ธ ํ๋๋ง ์ธ๋ถ์์ ์ฐธ์กฐํ ์ ์๋ค.declare global
: ๋ชจ๋ ํ์ผ์์๋ ์ ์ญ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค. ์ ์ญ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ํด๋น ์ ์ธ์ ์ฐธ์กฐ๋ฅผ ์ํด ๋ณ๋์ ๋ถ๋ฌ์ค๊ธฐ ์ฝ๋๊ฐ ํ์ ์๋ค๋ ๋ป์ด๋ค. ์ฐธ๊ณ ๋ก ์ด ๋ธ๋ก์ ์ค๋ก์งdeclare module
๋ธ๋ก ์์์๋ง ์ค์ฒฉ์ด ๊ฐ๋ฅํ๋ค.
๐ .d.ts ํ์ผ (์ ์ธ ์ฝ๋๋ง ๋ด๊ธด ํ์ผ)
- ๊ตฌํ๋ถ๊ฐ ์๋ ์ ์ธ๋ถ๋ง์ ์์ฑํ๋ ์ฉ๋์ ํ์ผ์ ์๋ฏธํ๋ค.
- JS ์ฝ๋๋ก ์ปดํ์ผ ๋์ง ์๋๋ค.
- skipLibCheck ํ๋กํผํฐ๊ฐ false๋ผ๋ฉด ๋ค์ ๊ท์น๋ค์ ๊ฐ์ ํ๋ค. (true์ฌ๋ ์งํค๋ ๊ฒ์ด ์ข๋ค.)
- ์ ์ธ ์ฝ๋๋ง ์์ฑ์ด ๊ฐ๋ฅํ๊ณ , ์ผ๋ฐ ์ฝ๋๋ ์์ฑํ ์ ์๋ค.
- ๋ฐ๋ผ์ ์ต์์์ ์กด์ฌํ๋ ๋ณ์, ์์, ํจ์, ํด๋์ค, ๋ค์์คํ์ด์ค์ ์ ์ธ ์์๋ ๋ฐ๋์
declare
ํน์export
๊ฐ ๋ถ์ด์ผ ํ๋ค.
- ์ด ํ์ผ์ ์์ฑ๋๋
declare namespace
๋ธ๋ก๊ณผdeclare module
๋ธ๋ก์ ํ๋๋ค์๋export
ํค์๋๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ถ๋๋ค. ์ฆ ๊ตณ์ด ๋ ๋ถ์ฌ์ค ํ์๊ฐ ์๋ค.
๐ export = & import = require()
- CommonJS์ AMD๋ผ๋ ๋ชจ๋ ์์คํ
์์๋
exports
๊ฐ์ฒด๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํ๋ค. exports
๋ ๋ชจ๋๋ก๋ถํฐ ๋ด๋ณด๋ด์ง๋ ๋ฐ์ดํฐ๋ค์ ๋ด๊ณ ์๋ ํ๋์ ๊ฐ์ฒด์ด๋ค.- ๊ทธ๋ฆฌ๊ณ
exports
๊ฐ์ฒด๋ฅผ ๋ ๋ค๋ฅธ ์ปค์คํ ๊ฐ์ฒด๋ก ๋์ฒดํ๋ ๊ฒ๋ ์ง์ํ๋ค. - ์ฌ์ค
export default
๊ฐ ์ด ๋์์ ๋์ฒดํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด์ง๋ง, ์ด ๋์ ํธํ์ฑ์ด ์ข์ง ์๋ค. - ๊ทธ๋์ TypeScript๋ CommonJS์ AMD์์
exports
๊ฐ์ฒด๋ฅผ ๋ ๋ค๋ฅธ ์ปค์คํ ๊ฐ์ฒด๋ก ๋์ฒดํ๋ ๋์์ ์ ์ฌํ๊ฒ ๋ฐ๋ผํ ์ ์๋๋กexport =
๋ฌธ๋ฒ์ ์ง์ํ๊ณ ์๋ค. export =
๋ฌธ๋ฒ์ ๋ชจ๋๋ก๋ถํฐ ๋ด๋ณด๋ด์ง ํ๋์ ๊ฐ์ฒด๋ฅผ ์ง์ ํ๋ค. ๊ทธ๊ฒ์ ํด๋์ค์ผ ์๋ ์๊ณ , ์ธํฐํ์ด์ค์ผ ์๋ ์๊ณ , ๋ค์์คํ์ด์ค์ผ ์๋ ์๊ณ , ์ด๊ฑฐํ์ผ ์๋ ์๋ค.export =
๋ฌธ๋ฒ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ด๋ณด๋ธ ๋ชจ๋์ ๊ฒฝ์ฐ ๋ฐ๋์import module = require("module")
๋ฌธ๋ฒ์ผ๋ก๋ง ๋ถ๋ฌ์์ผ ํ๋ค.- ๋จ, module ํ๋กํผํฐ๊ฐ esnext์ด๋ฉด ์ด ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค๋ฉฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ๋ค๋ง .d.ts ํ์ผ์์๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. (๊ทธ ์ด์ ๋ ์์ง ํ์ ํ์ง ๋ชปํ๋ค.)
๐ export as namespace
- .d.ts ํ์ผ์์๋ง ์ฌ์ฉํ ์ ์๋ ๋ฌธ๋ฒ์ด๋ค.
- export ๋๋ ๋ฐ์ดํฐ๋ค์ ํ๋์ ๋ค์์คํ์ด์ค๋ก ๋ฌถ์ด์ export ์ํค๋ ๋ฌธ๋ฒ์ด๋ค.
- ๊ทธ๋ ๊ฒ export ๋๋ ๋ค์์คํ์ด์ค๋ ์ ์ญ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค. ์ฆ ๋ถ๋ฌ์ค๊ธฐ ์ฝ๋๊ฐ ํ์ ์๋ค.