μ΄ κΈμμλ TypeScriptμμ λͺ¨λκ³Ό λ€μμ€νμ΄μ€λ₯Ό μ¬μ©νμ¬ μ½λλ₯Ό ꡬμ±νλ λ€μν λ°©λ²μ κ°λ΅νκ² μ€λͺ ν©λλ€. λν λ€μμ€νμ΄μ€μ λͺ¨λμ κ΄ν λͺ κ°μ§ κ³ κΈ μ£Όμ μ TypeScriptμμ λ€μμ€νμ΄μ€μ λͺ¨λμ μ¬μ©ν λ νν λ§μ£ΌμΉλ μνμ±μ μ΄ν΄λ³Ό κ²μ λλ€.
ES λͺ¨λμ λν μμΈν λ΄μ©μ λͺ¨λ λ¬Έμλ₯Ό μ°Έκ³ νμΈμ. TypeScript λ€μμ€νμ΄μ€μ λν μμΈν λ΄μ©μ λ€μμ€νμ΄μ€ λ¬Έμλ₯Ό μ°Έκ³ νμΈμ.
μ°Έκ³ : λ§€μ°Β μ€λλ λ²μ μ TypeScript λ€μμ€νμ΄μ€λ μ΄μ μ JavaScript λͺ¨λ μμ€ν μΈ 'λ΄λΆ λͺ¨λ'μ΄λΌκ³ λΆλ Έμ΅λλ€.
λͺ¨λμλ μ½λμ μ μΈ λ λ€ ν¬ν¨λ μ μμ΅λλ€.
λͺ¨λμ λν λͺ¨λ λ‘λ(μ: CommonJs/Require.js)μ λν μμ‘΄μ±μ΄λ ES λͺ¨λμ΄ μ§μνλ λ°νμμ κ°μ§κ³ μμ΅λλ€. λͺ¨λμ λ λμ μ½λ μ¬μ¬μ©μ±μ μν΄, κ°λ ₯ν κ³ λ¦½μ±κ³Ό λ²λ€λ§μ μν ν₯μλ λꡬλ₯Ό μ 곡ν©λλ€.
λν Node.js μ ν리μΌμ΄μ μ κ²½μ° λͺ¨λμ΄ κΈ°λ³Έμ μΈ λ°©λ²μ΄λ©°, μ½λλ₯Ό ꡬ쑰ννλ λ° μμ΄ κΆμ₯νλ μ κ·Όλ²μ΄λΌλ μ μ μ μν΄μΌ ν©λλ€.
ECMAScript 2015λΆν°, λͺ¨λμ μΈμ΄μμ κΈ°λ³Έμ μΌλ‘ λ΄μ¬ν λΆλΆμ΄λ©°, λͺ¨λ νΈν μμ§ κ΅¬νμ λͺ¨λμ μ§μν΄μΌ ν©λλ€. λ°λΌμ, μλ‘μ΄ νλ‘μ νΈμ κ²½μ° μ½λλ₯Ό ꡬμ±νλ λ°©λ²μΌλ‘ λͺ¨λμ κΆμ₯ν©λλ€.
λ€μμ€νμ΄μ€λ μ½λλ₯Ό ꡬμ±νλ TypeScriptλ§μ κ³ μ ν λ°©λ²μ
λλ€.
λ€μμ€νμ΄μ€λ κ°λ¨ν μ μ λ€μμ€νμ΄μ€μμ JavaScript κ°μ²΄λ‘ μ΄λ¦ λΆμ¬μ§λλ€.
μ΄λ¬ν μ λλΆμ λ€μμ€νμ΄μ€λ₯Ό μμ£Ό λ¨μν κ΅¬μ‘°λ‘ μ¬μ©ν μ μμ΅λλ€.
λͺ¨λκ³Ό λ¬λ¦¬, μ¬λ¬ κ°μ νμΌμ ν¬κ΄ν μ μμΌλ©°, --outFileμ μ¬μ©ν΄ μ°κ²°ν μ μμ΅λλ€.
λ€μμ€νμ΄μ€λ μΉ μ ν리μΌμ΄μ
μμ μ½λλ₯Ό ꡬ쑰ννκΈ°μ μ’μ λ°©λ²μ΄λ©°, λͺ¨λ μμ‘΄μ±μ HTML νμ΄μ§μ <script> νκ·Έλ‘ ν¬ν¨ν©λλ€.
νΉν λκ·λͺ¨ μ ν리μΌμ΄μ μ κ²½μ°, μ΄ λ°©λ²μ λͺ¨λ μ μ λ€μμ€νμ΄μ€κ° μ€μΌλλ κ²½μ°μ λ§μ°¬κ°μ§λ‘ μ»΄ν¬λνΈμ μμ‘΄μ±μ μλ³νκΈ° νλ€κ² λ§λ€ μ μμ΅λλ€.
μ¬κΈ°μλ λ€μμ€νμ΄μ€μ λͺ¨λμ μ¬μ©ν λ μμ£Ό λ°μνλ λ€μν μνμ±κ³Ό κ·Έ ν΄κ²°μ± μ μμλ³΄κ² μ΅λλ€.
μΌλ°μ μΈ μ€μλ λͺ¨λ νμΌμ μ°Έμ‘°νκΈ° μν΄ importλ¬Έ λμ /// <reference ... /> ꡬ문μ μ¬μ©νλ κ²μ
λλ€.
μ΄ λμ μ°¨μ΄λ₯Ό μ΄ν΄νκΈ° μν΄, μ°μ import κ²½λ‘μ μμΉν λͺ¨λμ λν νμ
μ 보λ₯Ό μ»΄νμΌλ¬κ° μ΄λ»κ² μ°Ύμλ΄λμ§λ₯Ό μ΄ν΄ν΄μΌ ν©λλ€. (μλ₯Ό λ€μ΄, import x from "...";, import x = require("..."); λ± μμ ...)
μ»΄νμΌλ¬λ .ts,Β .tsxλ₯Ό μ°Ύμ λ€μ μ μ ν κ²½λ‘μ μμΉνΒ .d.tsλ₯Ό μ°Ύμ΅λλ€.
λ§μ½ νΉμ νμΌμ μ°Ύμ§ λͺ»νλ€λ©΄, μ»΄νμΌλ¬λ μ°λΉμΈνΈ λͺ¨λ(ambient module) μ μΈμ νμν κ²μ
λλ€.
.d.ts νμΌμμ μ΄κ²λ€μ μ μΈν΄μΌ νλ€λ μ μ κΈ°μ΅νμΈμ.
-
myModules.d.ts// λͺ¨λμ΄ μλ .d.ts νμΌ λλ .ts νμΌ: declare module "SomeModule" { export function fn(): string; }
-
myOtherModule.ts/// <reference path="myModules.d.ts" /> import * as m from "SomeModule";
μμ reference νκ·Έλ μ°λΉμΈνΈ λͺ¨λ(ambient module) μ μΈμ΄ ν¬ν¨λ μ μΈ νμΌμ μμΉλ₯Ό μ§μ νλ λ° νμν©λλ€.
μ΄ λ°©λ²μ μ¬λ¬ TypeScript μνμμ μ¬μ©νλ node.d.tsνμΌμ μ¬μ©νλ λ°©λ²μ
λλ€.
λ€μμ€νμ΄μ€λ₯Ό μ¬μ©νλ νλ‘κ·Έλ¨μ λͺ¨λλ‘ λ³κ²½νλ©΄, νμΌμ λ€μκ³Ό κ°μ λͺ¨μ΅μ΄ λκΈ° μ½μ΅λλ€:
-
shapes.tsexport namespace Shapes { export class Triangle { /* ... */ } export class Square { /* ... */ } }
μ΅μμ λͺ¨λ Shapesλ μλ¬΄λ° μλ―Έ μμ΄ Triangleκ³Ό Squareμ κ°μΈκ³ μμ΅λλ€.
μ΄λ° μ μ λͺ¨λ μ¬μ©μμκ² νΌλκ³Ό μ§μ¦μ μ λ°ν©λλ€:
-
shapeConsumer.tsimport * as shapes from "./shapes"; let t = new shapes.Shapes.Triangle(); // shapes.Shapes?
TypeScript λͺ¨λμ μ€μν νΉμ§ μ€ νλλ μλ‘ λ€λ₯Έ λ κ°μ λͺ¨λμ΄ μ λ κ°μ μ€μ½ν μμ μ΄λ¦μ μ 곡νμ§ μλλ€λ μ μ λλ€. λͺ¨λ μ¬μ©μκ° μ΄λ€ μ΄λ¦μ ν λΉν μ§λ₯Ό κ²°μ νκΈ° λλ¬Έμ, λ€μμ€νμ΄μ€ λ΄λΆμμ λ΄λ³΄λ΄λ μ¬λ²μ 미리 κ°μΈμ€ νμκ° μμ΅λλ€.
λͺ¨λ λ΄μ©μ λ€μμ€νμ΄μ€λ₯Ό μ€μ νμ§ μμλ λλ μ΄μ λ₯Ό λ€μ λ§νλ©΄, λ€μμ€νμ΄μ€λ₯Ό μ§μ νλ μΌλ°μ μΈ λͺ©μ μ ꡬ쑰μ λ Όλ¦¬μ κ·Έλ£Ήμ μ 곡νκ³ μ΄λ¦ μΆ©λμ λ°©μ§νκΈ° μν¨μ λλ€. λͺ¨λ νμΌμ΄ μ΄λ―Έ μ€μ€λ‘ λ Όλ¦¬μ κ·Έλ£Ήμ νμ±νκ³ μκΈ° λλ¬Έμ, μ΅μμ μ΄λ¦μ μ΄λ₯Ό κ°μ Έμ€λ μ½λμ μν΄ μ μλκ³ , λ΄λ³΄λ΄λ κ°μ²΄λ₯Ό μν μΆκ°μ μΈ λͺ¨λ κ³μΈ΅μ μ¬μ©ν νμκ° μμ΅λλ€.
λ€μμ μμ λ μμ λλ€:
-
shapes.tsexport class Triangle { /* ... */ } export class Square { /* ... */ }
-
shapeConsumer.tsimport * as shapes from "./shapes"; let t = new shapes.Triangle();
JS νμΌκ³Ό λͺ¨λμ΄ μΌλμΌ λμμΈ κ²μ²λΌ, TypeScriptλ λͺ¨λ μμ€ νμΌκ³Ό μ΄ νμΌμμ μμ±λ JS νμΌλ μΌλμΌ λμμ
λλ€.
μ΄λ¬ν νΉμ± λλ¬Έμ μ΄λ€ λͺ¨λ μμ€ν
μ μ¬μ©νλλμ λ°λΌμ μ¬λ¬ λͺ¨λ μμ€ νμΌμ ν©μΉλ μμ
μ΄ λΆκ°λ₯ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, commonjs λλ umdλ₯Ό λμμΌλ‘ νλ λμμλ outFile μ΅μ
μ μ¬μ©ν μ μμ§λ§, TypeScript 1.8 μ΄νλΆν°, amd λλ systemλ₯Ό λμμΌλ‘ νλ κ²½μ°μλ outFile μ΅μ
μ μ¬μ©ν μ μκ² λμμ΅λλ€.