μ©μ΄μ λν μ°Έκ³ μ¬ν: TypeScript 1.5μμλ λͺ μΉμ΄ λ³κ²½λμμ΅λλ€.
"λ΄λΆ(Internal) λͺ¨λ"μ μ΄μ "λ€μμ€νμ΄μ€"μ λλ€.
"μΈλΆ(External) λͺ¨λ"μ μ΄μ ECMAScript 2015μ μ©μ΄μ λ§κ² κ°λ¨ν "λͺ¨λ"μ λλ€ (μ¦λͺ¨λ X {
λ νμ¬ μ νΈλλλ€μμ€νμ΄μ€ X {
μ λμΌν©λλ€).
ECMAScript 2015λΆν° JavaScriptμλ λͺ¨λ κ°λ μ΄ μμ΅λλ€. TypeScriptλ μ΄ κ°λ μ 곡μ ν©λλ€.
λͺ¨λμ μ μ μ€μ½νκ° μλ μ체 μ€μ½ν λ΄μμ μ€νλ©λλ€.
μ΄λ export
νμ μ€ νλλ₯Ό μ¬μ©νμ¬ λͺ
μμ μΌλ‘ λ΄λ³΄λ΄μ§ μλ ν λͺ¨λμ μ μΈλ λ³μ, ν¨μ, ν΄λμ€ λ±μ΄ λͺ¨λ μΈλΆμ 보μ΄μ§ μλλ€λ κ²μ μλ―Έν©λλ€.
λ°λλ‘ λ€λ₯Έ λͺ¨λμμ λ΄λ³΄λΈ λ³μ, ν¨μ, ν΄λμ€, μΈν°νμ΄μ€ λ±μ μ¬μ©νλ €λ©΄ import
νμ μ€ νλλ₯Ό μ¬μ©νμ¬ κ°μ ΈμμΌ ν©λλ€.
λͺ¨λμ μ μΈμ μ λλ€. λͺ¨λ κ°μ κ΄κ³λ νμΌ μμ€μμ imports λ° exports μΈ‘λ©΄μμ μ§μ λ©λλ€.
λͺ¨λμ λͺ¨λ λ‘λλ₯Ό μ¬μ©νμ¬ λ λ€λ₯Έ λͺ¨λμ import ν©λλ€.
λ°νμμ λͺ¨λ λ‘λλ λͺ¨λμ μ€ννκΈ° μ μ λͺ¨λμ λͺ¨λ μμ‘΄μ±μ μ°Ύκ³ μ€νν©λλ€.
JavaScriptμμ μ¬μ©λλ μ μλ €μ§ λͺ¨λ λ‘λλ Node.jsμ CommonJSλͺ¨λ λ‘λμ΄λ©° μΉ μ ν리μΌμ΄μ
μ κ²½μ° require.jsμ
λλ€.
TypeScriptμμλ ECMAScript 2015μ λ§μ°¬κ°μ§λ‘ μ΅μμ import
λλ export
κ° ν¬ν¨λ νμΌμ λͺ¨λλ‘ κ°μ£Όν©λλ€.
λ³μ, ν¨μ, ν΄λμ€, νμ
λ³μΉ(alias) λλ μΈν°νμ΄μ€μ κ°μ μ μΈλ¬Έμ export
ν€μλλ₯Ό μΆκ°νμ¬ λ΄λ³΄λΌ μ μμ΅λλ€.
export interface StringValidator {
isAcceptable(s: string): boolean;
}
export const numberRegexp = /^[0-9]+$/;
export class ZipCodeValidator implements StringValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
Export λ¬Έμ μ¬μ©μλ₯Ό μν΄ Exportμ μ΄λ¦μ λ³κ²½ν΄μΌ νλ κ²½μ°μ μ μ©νλ―λ‘ μμ μμ λ₯Ό λ€μκ³Ό κ°μ΄ μμ±ν μ μμ΅λλ€:
class ZipCodeValidator implements StringValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
export { ZipCodeValidator };
export { ZipCodeValidator as mainValidator };
μ’
μ’
λͺ¨λμ λ€λ₯Έ λͺ¨λμ νμ₯νκ³ μΌλΆ κΈ°λ₯μ λΆλΆμ μΌλ‘ λ
ΈμΆν©λλ€.
λ€μ λ΄λ³΄λ΄κΈ°(re-export)λ λ‘μ»¬λ‘ importνκ±°λ λ‘컬 λ³μλ₯Ό λμ
νμ§ μμ΅λλ€.
export class ParseIntBasedZipCodeValidator {
isAcceptable(s: string) {
return s.length === 5 && parseInt(s).toString() === s;
}
}
// μλ³Έ validator λ΄λ³΄λ΄μ§λ§ μ΄λ¦μ λ³κ²½ν©λλ€
export {ZipCodeValidator as RegExpBasedZipCodeValidator} from "./ZipCodeValidator";
μ νμ μΌλ‘ λͺ¨λμ νλ μ΄μμ λͺ¨λμ κ°μΈκ³ export * from "module"
ꡬ문μ μ¬μ©νμ¬ λͺ¨λ exportλ₯Ό κ²°ν©ν μ μμ΅λλ€.
export * from "./StringValidator"; // exports interface 'StringValidator'
export * from "./LettersOnlyValidator"; // exports class 'LettersOnlyValidator'
export * from "./ZipCodeValidator"; // exports class 'ZipCodeValidator'
importλ λͺ¨λμμ export λ§νΌ μ½μ΅λλ€.
export μ μΈμ κ°μ Έμ€λ €λ©΄ μλμ import
νμ μ€ νλλ₯Ό μ¬μ©νμμμ€.
import { ZipCodeValidator } from "./ZipCodeValidator";
let myValidator = new ZipCodeValidator();
imports μ΄λ¦μ λ³κ²½ν μλ μμ΅λλ€.
import { ZipCodeValidator as ZCV } from "./ZipCodeValidator";
let myValidator = new ZCV();
μ 체 λͺ¨λμ λ¨μΌ λ³μλ‘ κ°μ Έμ€κ³ μ΄λ₯Ό μ¬μ©νμ¬ λͺ¨λ λ΄λ³΄λ΄κΈ°μ μ κ·ΌνκΈ° (Import the entire module into a single variable, and use it to access the module exports)
import * as validator from "./ZipCodeValidator";
let myValidator = new validator.ZipCodeValidator();
κΆμ₯λμ§λ μμ§λ§ μΌλΆ λͺ¨λμ λ€λ₯Έ λͺ¨λμμ μ¬μ©ν μ μλ κΈλ‘λ² μνλ₯Ό μ€μ ν©λλ€.
μ΄λ¬ν λͺ¨λμλ μ΄λ ν exportsλ μκ±°λ μ¬μ©μκ° ν΄λΉ exportsμ κ΄μ¬μ΄ μμ μ μμ΅λλ€.
μ΄λ¬ν λͺ¨λμ κ°μ Έμ€λ €λ©΄ λ€μμ μ¬μ©ν©λλ€:
import "./my-module.js";
κ° λͺ¨λμ μ νμ μΌλ‘ default
exportλ₯Ό λ΄λ³΄λΌ μ μμ΅λλ€.
Default exportsλ default
ν€μλλ‘ νμλ©λλ€. λͺ¨λλ³ default
exportsλ νλλ§ κ°λ₯ν©λλ€.
default
exportsλ λ€λ₯Έ import νμμ μ¬μ©νμ¬ κ°μ Έμ΅λλ€.
default
exportsλ μ λ§ νΈλ¦¬ν©λλ€.
μλ₯Ό λ€μ΄ JQuery
κ°μ λΌμ΄λΈλ¬λ¦¬μλ default exportμΈ jQuery
λλ $
κ° μμ μ μμΌλ©° μ΄λ₯Ό $
λ jQuery
λΌλ μ΄λ¦μΌλ‘λ κ°μ Έμ¬ μ μμ΅λλ€.
declare let $: JQuery;
export default $;
import $ from "JQuery";
$("button.continue").html( "Next Step..." );
ν΄λμ€ λ° ν¨μ μ μΈμ default exportsλ‘ μ§μ μμ±λ μ μμ΅λλ€.
Default export ν΄λμ€μ ν¨μ μ μΈ λ€μ΄λ°μ μ νμ μ
λλ€.
export default class ZipCodeValidator {
static numberRegexp = /^[0-9]+$/;
isAcceptable(s: string) {
return s.length === 5 && ZipCodeValidator.numberRegexp.test(s);
}
}
import validator from "./ZipCodeValidator";
let myValidator = new validator();
λλ
const numberRegexp = /^[0-9]+$/;
export default function (s: string) {
return s.length === 5 && numberRegexp.test(s);
}
import validate from "./StaticZipCodeValidator";
let strings = ["Hello", "98052", "101"];
// ν¨μ μ ν¨μ± κ²μ¬ μ¬μ©
strings.forEach(s => {
console.log(`"${s}" ${validate(s) ? " matches" : " does not match"}`);
});
default
exportsλ κ° μΌ μλ μμ΅λλ€:
export default "123";
import num from "./OneTwoThree";
console.log(num); // "123"
CommonJSμ AMD λͺ¨λ μΌλ°μ μΌλ‘ λͺ¨λμ λͺ¨λ exportsλ₯Ό ν¬ν¨νλ exports
κ°μ²΄ κ°λ
μ κ°μ§κ³ μμ΅λλ€.
λν exports
κ°μ²΄λ₯Ό 컀μ€ν
λ¨μΌ κ°μ²΄λ‘ λ체νλ κ²μ μ§μν©λλ€.
Default exportsλμ΄ λμμ λμ νλ μν μ ν©λλ€.
κ·Έλ¬λ κ·Έ λμ νΈνλμ§ μμ΅λλ€.
TypeScriptλ κΈ°μ‘΄μ CommonJSμ AMD μν¬νλ‘μ°λ₯Ό λͺ¨λΈλ§νκΈ° μν΄ export =
λ₯Ό μ§μν©λλ€.
export =
ꡬ문μ λͺ¨λμμ exportλ λ¨μΌ κ°μ²΄λ₯Ό μ§μ ν©λλ€.
ν΄λμ€, μΈν°νμ΄μ€, λ€μμ€νμ΄μ€, ν¨μ λλ μ΄κ±°νμ΄ λ μ μμ΅λλ€.
export =
λ₯Ό μ¬μ©νμ¬ λͺ¨λμ import ν λ λͺ¨λμ import νκΈ° μν΄ TypeScriptμ νΉμ ν import module = require("module")
μ μ¬μ©ν΄μΌν©λλ€.
let numberRegexp = /^[0-9]+$/;
class ZipCodeValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
export = ZipCodeValidator;
import zip = require("./ZipCodeValidator");
// μνμ© μν
let strings = ["Hello", "98052", "101"];
// μ¬μ©ν Validators
let validator = new zip();
// κ° λ¬Έμμ΄μ΄ κ° Validatorλ₯Ό ν΅κ³Όνλμ§ μ¬λΆλ₯Ό 보μ¬μ€λλ€.
strings.forEach(s => {
console.log(`"${ s }" - ${ validator.isAcceptable(s) ? "matches" : "does not match" }`);
});
μ»΄νμΌμ μ§μ λ λͺ¨λ λμμ λ°λΌ μ»΄νμΌλ¬λ Node.js (CommonJS), require.js (AMD), UMD, SystemJS λλ ECMAScript 2015 λ€μ΄ν°λΈ λͺ¨λ (ES6)μ μ μ ν μ½λλ₯Ό μμ±ν©λλ€.
μμ±λ μ½λμμ define
, require
λ° register
νΈμΆμ λν μμΈν μ 보λ κ° λͺ¨λ λ‘λμ λν λ¬Έμλ₯Ό μ°Έμ‘°νμΈμ.
μ΄ κ°λ¨ν μμ λ import λ° export μ€μ μ¬μ©λλ μ΄λ¦μ΄ λͺ¨λ λ‘λ© μ½λλ‘ μ΄λ»κ² λ³νλλμ§ λ³΄μ¬μ€λλ€.
import m = require("mod");
export let t = m.something + 1;
define(["require", "exports", "./mod"], function (require, exports, mod_1) {
exports.t = mod_1.something + 1;
});
var mod_1 = require("./mod");
exports.t = mod_1.something + 1;
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports); if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "./mod"], factory);
}
})(function (require, exports) {
var mod_1 = require("./mod");
exports.t = mod_1.something + 1;
});
System.register(["./mod"], function(exports_1) {
var mod_1;
var t;
return {
setters:[
function (mod_1_1) {
mod_1 = mod_1_1;
}],
execute: function() {
exports_1("t", t = mod_1.something + 1);
}
}
});
import { something } from "./mod";
export var t = something + 1;
μλμμλ κ° λͺ¨λμμ μ΄λ¦μ΄ μ§μ λ λ¨μΌ exportλ§ λ΄λ³΄λ΄λλ‘ μ΄μ μμ μ μ¬μ©λ Validator ꡬνμ ν΅ν©νμ΅λλ€.
μ»΄νμΌνλ €λ©΄ 컀맨λ λΌμΈμ λͺ¨λ λμμ μ§μ ν΄μΌ ν©λλ€.
Node.jsλ --module commonjs
λ₯Ό μ¬μ©νμΈμ.
require.jsμ κ²½μ° --module amdλ₯Ό μ¬μ©ν©λλ€.
μλ₯Ό λ€μ΄:
tsc --module commonjs Test.ts
μ»΄νμΌμ κ° λͺ¨λμ λ³λμ .js
νμΌμ΄ λ©λλ€.
μ°Έμ‘° νκ·Έμ λ§μ°¬κ°μ§λ‘ μ»΄νμΌλ¬λ μμ‘΄λ νμΌλ€μ μ»΄νμΌνκΈ° μν΄ import
λ¬Έμ λ°λ¦
λλ€.
export interface StringValidator {
isAcceptable(s: string): boolean;
}
import { StringValidator } from "./Validation";
const lettersRegexp = /^[A-Za-z]+$/;
export class LettersOnlyValidator implements StringValidator {
isAcceptable(s: string) {
return lettersRegexp.test(s);
}
}
import { StringValidator } from "./Validation";
const numberRegexp = /^[0-9]+$/;
export class ZipCodeValidator implements StringValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
import { StringValidator } from "./Validation";
import { ZipCodeValidator } from "./ZipCodeValidator";
import { LettersOnlyValidator } from "./LettersOnlyValidator";
// μνμ© μν
let strings = ["Hello", "98052", "101"];
// μ¬μ©ν Validators
let validators: { [s: string]: StringValidator; } = {};
validators["ZIP code"] = new ZipCodeValidator();
validators["Letters only"] = new LettersOnlyValidator();
// κ° λ¬Έμμ΄μ΄ κ° Validatorλ₯Ό ν΅κ³Όνλμ§ μ¬λΆλ₯Ό 보μ¬μ€λλ€.
strings.forEach(s => {
for (let name in validators) {
console.log(`"${ s }" - ${ validators[name].isAcceptable(s) ? "matches" : "does not match" } ${ name }`);
}
});
μ νμ λͺ¨λ λ‘λ©κ³Ό κΈ°ν κ³ κΈ λ‘λ© μλλ¦¬μ€ (Optional Module Loading and Other Advanced Loading Scenarios)
μν©μ λ°λΌ μΌλΆ 쑰건μμλ§ λͺ¨λμ λ‘λν μ μμ΅λλ€.
TypeScriptμμλ μλμ ν¨ν΄μ ν΅ν΄ λ€λ₯Έ κ³ κΈ λ‘λ μλ리μ€λ₯Ό ꡬννμ¬ νμ
μμ μ±μ μμ§ μκ³ λͺ¨λ λ‘λλ₯Ό μ§μ νΈμΆν μ μμ΅λλ€.
μ»΄νμΌλ¬λ κ° λͺ¨λμ΄ λ°©μΆλ JavaScriptμμ μ¬μ©λλμ§ μ¬λΆλ₯Ό κ°μ§ν©λλ€.
λͺ¨λ μλ³μκ° νμ
μ΄λ
Έν
μ΄μ
μ μΌλΆλ‘λ§ μ¬μ©λκ³ ννμμΌλ‘ μ¬μ©λμ§ μμΌλ©΄ ν΄λΉ λͺ¨λμ λν require
νΈμΆμ΄ λ°©μΆνμ§ μμ΅λλ€.
μ¬μ©νμ§ μλ μ°Έμ‘°λ₯Ό μ κ±°νλ©΄ μ±λ₯μ΄ μ΅μ νλκ³ ν΄λΉ λͺ¨λμ μ νμ μΌλ‘ λ‘λν μ μμ΅λλ€.
μ΄ ν¨ν΄μ ν΅μ¬ μμ΄λμ΄λ import id = require("...")
λ¬Έμ΄ λͺ¨λμ μν΄ λ
ΈμΆλ νμ
μ μ κ·Όν μ μλ€λ κ²μ
λλ€.
λͺ¨λ λ‘λλ μλμ if
λΈλ‘μ²λΌ λμ μΌλ‘ (require
λ₯Ό ν΅ν΄) νΈμΆλ©λλ€.
μ΄λ μ°Έμ‘° μλ΅ μ΅μ νκ° νμ©λμ΄ λͺ¨λμ΄ νμν κ²½μ°μλ§ λ‘λλ©λλ€.
μ΄ ν¨ν΄μ΄ μλνλ €λ©΄ import
λ₯Ό ν΅ν΄ μ μλ symbolμ΄ νμ
μμΉμμλ§ μ¬μ©λμ΄μΌ ν©λλ€(μ¦ JavaScriptλ‘ λ°©μΆλ μ μλ μμΉμ μ λ μ‘΄μ¬νμ§ μμ΅λλ€).
νμ
μμ μ±μ μ μ§νκΈ° μν΄ typeof
ν€μλλ₯Ό μ¬μ©ν μ μμ΅λλ€.
typeof
ν€μλλ νμ
μ μμΉμμ μ¬μ©λ λ κ°μ νμ
μ μμ±νλ©° μ΄ κ²½μ° λͺ¨λμ νμ
μ΄ λ©λλ€.
declare function require(moduleName: string): any;
import { ZipCodeValidator as Zip } from "./ZipCodeValidator";
if (needZipValidation) {
let ZipCodeValidator: typeof Zip = require("./ZipCodeValidator");
let validator = new ZipCodeValidator();
if (validator.isAcceptable("...")) { /* ... */ }
}
declare function require(moduleNames: string[], onLoad: (...args: any[]) => void): void;
import * as Zip from "./ZipCodeValidator";
if (needZipValidation) {
require(["./ZipCodeValidator"], (ZipCodeValidator: typeof Zip) => {
let validator = new ZipCodeValidator.ZipCodeValidator();
if (validator.isAcceptable("...")) { /* ... */ }
});
}
declare const System: any;
import { ZipCodeValidator as Zip } from "./ZipCodeValidator";
if (needZipValidation) {
System.import("./ZipCodeValidator").then((ZipCodeValidator: typeof Zip) => {
var x = new ZipCodeValidator();
if (x.isAcceptable("...")) { /* ... */ }
});
}
TypeScriptλ‘ μμ±λμ§ μμ λΌμ΄λΈλ¬λ¦¬μ ννμ μ€λͺ νλ €λ©΄ λΌμ΄λΈλ¬λ¦¬κ° λνλ΄λ APIλ₯Ό μ μΈν΄μΌ ν©λλ€.
ꡬνμ "ambient"μΌλ‘ μ μνμ§ μλ μ μΈμ΄λΌκ³ νλ©°
μΌλ°μ μΌλ‘ μ΄λ€μ .d.ts
νμΌμ μ μλμ΄ μμ΅λλ€.
C/C++μ μ΅μνλ€λ©΄ μ΄κ²λ€μ .h
νμΌλ‘ μκ°ν μ μμ κ²μ
λλ€.
λͺ κ°μ§ μλ₯Ό λ€μ΄λ³΄κ² μ΅λλ€
Node.jsμμ λλΆλΆμ μμ
μ νλ μ΄μμ λͺ¨λμ λ‘λνμ¬ μνλ©λλ€.
κ° λͺ¨λμ .d.ts
νμΌμ μ΅μμ μμ€μ λ΄λ³΄λ΄κΈ° μ μΈμΌλ‘ μ μν μ μμ§λ§ λ λμ .d.ts
νμΌλ‘ μμ±νλ κ²μ΄ λ νΈλ¦¬ν©λλ€.
κ·Έλ κ²νκΈ° μν΄μ ambient λ€μμ€νμ΄μ€μ λΉμ·ν ꡬ쑰λ₯Ό μ¬μ©νμ§λ§ λμ€μ import ν μ μλ λͺ¨λμ module
ν€μλμ λ°μ΄ν λΆμ μ΄λ¦μ μ¬μ©ν©λλ€.
μλ₯Ό λ€μ΄:
declare module "url" {
export interface Url {
protocol?: string;
hostname?: string;
pathname?: string;
}
export function parse(urlStr: string, parseQueryString?, slashesDenoteHost?): Url;
}
declare module "path" {
export function normalize(p: string): string;
export function join(...paths: any[]): string;
export var sep: string;
}
μ΄μ /// <reference>
node.d.ts
λ₯Ό λ§λ€ μ μκ³ import url = require("url");
λλ import * as URL from "url"
λ₯Ό μ¬μ©νμ¬ λͺ¨λμ μ μ¬ν μ μμ΅λλ€.
/// <reference path="node.d.ts"/>
import * as URL from "url";
let myUrl = URL.parse("http://www.typescriptlang.org");
μλ‘μ΄ λͺ¨λμ μ¬μ©νκΈ° μ μ μ μΈμ μμ±νλ μκ°μ λ΄κ³ μΆμ§ μλ€λ©΄ shorthand μ μΈμ μ¬μ©νμ¬ λΉ λ₯΄κ² μμν μ μμ΅λλ€.
declare module "hot-new-module";
shorthand λͺ¨λμ λͺ¨λ importsλ any
νμ
μ κ°μ§λλ€.
import x, {y} from "hot-new-module";
x(y);
SystemJS λ° AMD κ°μ μΌλΆ λͺ¨λ λ‘λλ€μ JavaScriptκ° μλ 컨ν
μΈ λ₯Ό import ν μ μμ΅λλ€.
μΌλ°μ μΌλ‘ νΉλ³ν λ‘λμ μλ―Έλ‘ μ λνλ΄λ μ λμ¬ λλ μ λ―Έμ¬λ₯Ό μ¬μ©νλ€.
μ΄λ¬ν κ²½μ°λ₯Ό λ€λ£¨κΈ° μν΄ Wildcard λͺ¨λ μ μΈμ μ¬μ©ν μ μμ΅λλ€.
declare module "*!text" {
const content: string;
export default content;
}
// μΌλΆλ κ·Έ λ°λμ λ°©λ²μ μ¬μ©ν©λλ€.
declare module "json!*" {
const value: any;
export default value;
}
μ΄μ "*!text"
λλ "json!*"
κ³Ό μΌμΉνλ κ²μ import ν μ μμ΅λλ€.
import fileContent from "./xyz.txt!text";
import data from "json!http://example.com/data.json";
console.log(data, fileContent);
μΌλΆ λΌμ΄λΈλ¬λ¦¬λ λ§μ λͺ¨λ λ‘λμμ μ¬μ©νλλ‘ μ€κ³λμκ±°λ λͺ¨λ λ‘λκ° μμ΅λλ€ (κΈλ‘λ² λ³μ).
μ΄λ¬ν λͺ¨λμ UMD λͺ¨λμ΄λΌκ³ ν©λλ€.
μ΄λ¬ν λΌμ΄λΈλ¬λ¦¬λ import λλ κΈλ‘λ² λ³μλ₯Ό ν΅ν΄ μ κ·Όν μ μμ΅λλ€.
μλ₯Ό λ€μ΄:
export function isPrime(x: number): boolean;
export as namespace mathLib;
κ·Έλ¬λ©΄ λΌμ΄λΈλ¬λ¦¬λ₯Ό λͺ¨λμμ importλ‘ μ¬μ©ν μ μμ΅λλ€.
import { isPrime } from "math-lib";
isPrime(2);
mathLib.isPrime(2); // μ€λ₯: λͺ¨λ λ΄λΆμμ μ μ μ μλ₯Ό ν μ μμ΅λλ€.
κΈλ‘λ² λ³μλ‘ μ¬μ©ν μλ μμ§λ§ μ€ν¬λ¦½νΈ λ΄λΆμμλ§ μ¬μ©ν μ μμ΅λλ€.
(μ€ν¬λ¦½νΈλ imports λλ exportsκ° μλ νμΌμ
λλ€)
mathLib.isPrime(2);
λͺ¨λμ μ¬μ©μλ€μ export ν κ²λ€μ μ¬μ©ν λ κ°λ₯ν ν λ§μ°°μ΄ μ μ΄μΌ ν©λλ€.
λ무 λ§μ μ€μ²©μ λ 벨μ μΆκ°νλ κ²μ λ€λ£¨κΈ° νλ€κΈ° λλ¬Έμ ꡬ쑰ν λ°©λ²μ λν΄ μ μ€ν μκ°νμΈμ.
λͺ¨λμμ λ€μμ€νμ΄μ€λ₯Ό export νλ κ²μ μ€μ²© κ³μΈ΅μ λ무 λ§μ΄ μΆκ°νλ μμ
λλ€.
λ€μμ€νμ΄μ€κ° νμν λλ μμ§λ§ λͺ¨λμ μ¬μ©ν λλ μΆκ°μ μΈ λ 벨μ κ°μ μ°Έμ‘°λ₯Ό μΆκ°ν©λλ€.
μ΄λ μ¬μ©μμκ² μ¬λΉ λ₯΄κ² κ³ ν΅μ΄ λ μ μμΌλ©° μΌλ°μ μΌλ‘ λΆνμν©λλ€.
export ν΄λμ€μ μ μ λ©μλμλ λΉμ·ν λ¬Έμ κ° μμ΅λλ€ - ν΄λμ€ μ체μ μΌλ‘ μ€μ²© κ³μΈ΅μ μΆκ°ν©λλ€.
ννμ΄λ μλκ° λͺ
ννκ³ μ μ©ν λ°©μμΌλ‘ μ¦κ°νμ§ μλ ν κ°λ¨ν ν¬νΌ ν¨μλ₯Ό λ΄λ³΄λ΄λ κ²μ κ³ λ €νμΈμ.
λ¨μΌ class
λλ function
λ§ exportνλ κ²½μ° export default
λ₯Ό μ¬μ©νμΈμ (If you're only exporting a single class
or function
, use export default
)
"μ΅μμ λ 벨μ κ°κΉκ² λ΄λ³΄λ΄κΈ°"κ° λͺ¨λ μ¬μ©μμ λ§μ°°μ μ€μ΄λ κ²μ²λΌ default exportλ₯Ό λμ
νλ κ²λ λ§μ°¬κ°μ§μ
λλ€.
λͺ¨λμ μ£Όμ λͺ©μ μ΄ νλμ νΉμ exportλ₯Ό μ μ₯νλ κ²μ΄λΌλ©΄ μ΄λ₯Ό default exportλ‘ export νλ κ²μ κ³ λ €ν΄μΌ ν©λλ€.
μ΄λ κ² νλ©΄ importingλ₯Ό μ¬μ©νλ©° μ€μ λ‘ importλ₯Ό λ μ½κ² μ¬μ©ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄:
export default class SomeType {
constructor() { ... }
}
export default function getThing() { return "thing"; }
import t from "./MyClass";
import f from "./MyFunc";
let x = new t();
console.log(f());
μ΄λ μ¬μ©μλ₯Ό μν μ΅μ μ μ νμ
λλ€.
νμ
μ μ΄λ¦μ μνλ λλ‘ μ§μ μ μμΌλ©°(μ΄ κ²½μ° t
) κ°μ²΄λ₯Ό μ°ΎκΈ° μν΄ κ³Όλνκ² μ μ μ°μ νμκ° μμ΅λλ€.
λ€μμ κ°μ²΄λ₯Ό λ΄λ³΄λ΄λ κ²½μ° λͺ¨λ μ΅μμ λ 벨μ λ°°μΉνμΈμ. (If you're exporting multiple objects, put them all at top-level)
export class SomeType { /* ... */ }
export function someFunc() { /* ... */ }
λ°λλ‘ κ°μ Έμ¬ λ:
import { SomeType, someFunc } from "./MyThings";
let x = new SomeType();
let y = someFunc();
λ€μλ₯Ό importing νλ κ²½μ° λ€μμ€νμ΄μ€ import ν¨ν΄ μ¬μ© (Use the namespace import pattern if you're importing a large number of things)
export class Dog { ... }
export class Cat { ... }
export class Tree { ... }
export class Flower { ... }
import * as myLargeModule from "./MyLargeModule.ts";
let x = new myLargeModule.Dog();
μ’
μ’
λͺ¨λμ κΈ°λ₯μ νμ₯ν΄μΌ ν©λλ€.
μΌλ°μ μΈ JS ν¨ν΄μ JQuery νμ₯μ΄ μλνλ κ²κ³Ό λΉμ·ν extensionsμ μ¬μ©νμ¬ μλ³Έ κ°μ²΄λ₯Ό 보κ°νλ κ²μ
λλ€.
μμ μΈκΈνλ―μ΄ λͺ¨λμ μ μ λ€μμ€νμ΄μ€ κ°μ²΄μ²λΌ λ³ν©λμ§ μμ΅λλ€.
κΆμ₯λλ ν΄κ²°μ±
μ μλ³Έ κ°μ²΄λ₯Ό λ³νμν€μ§ μκ³ μλ‘μ΄ κΈ°λ₯μ μ 곡νλ μλ‘μ΄ μν°ν°λ₯Ό exportνλ κ²μ
λλ€.
Calculator.ts
λͺ¨λμ μ μλ κ°λ¨ν κ³μ°κΈ° ꡬνμ κ³ λ €ν΄λ³΄μΈμ.
λν λͺ¨λμ μ
λ ₯ λ¬Έμμ΄ λͺ©λ‘μ μ λ¬νκ³ λμ κ²°κ³Όλ₯Ό μμ±νμ¬ κ³μ°κΈ° κΈ°λ₯μ ν
μ€νΈνλ ν¬νΌ ν¨μλ₯Ό exports ν©λλ€.
export class Calculator {
private current = 0;
private memory = 0;
private operator: string;
protected processDigit(digit: string, currentValue: number) {
if (digit >= "0" && digit <= "9") {
return currentValue * 10 + (digit.charCodeAt(0) - "0".charCodeAt(0));
}
}
protected processOperator(operator: string) {
if (["+", "-", "*", "/"].indexOf(operator) >= 0) {
return operator;
}
}
protected evaluateOperator(operator: string, left: number, right: number): number {
switch (this.operator) {
case "+": return left + right;
case "-": return left - right;
case "*": return left * right;
case "/": return left / right;
}
}
private evaluate() {
if (this.operator) {
this.memory = this.evaluateOperator(this.operator, this.memory, this.current);
}
else {
this.memory = this.current;
}
this.current = 0;
}
public handelChar(char: string) {
if (char === "=") {
this.evaluate();
return;
}
else {
let value = this.processDigit(char, this.current);
if (value !== undefined) {
this.current = value;
return;
}
else {
let value = this.processOperator(char);
if (value !== undefined) {
this.evaluate();
this.operator = value;
return;
}
}
}
throw new Error(`Unsupported input: '${char}'`);
}
public getResult() {
return this.memory;
}
}
export function test(c: Calculator, input: string) {
for (let i = 0; i < input.length; i++) {
c.handelChar(input[i]);
}
console.log(`result of '${input}' is '${c.getResult()}'`);
}
λ€μμ test
ν¨μλ₯Ό μ¬μ©ν κ³μ°κΈ°μ κ°λ¨ν ν
μ€νΈμ
λλ€.
import { Calculator, test } from "./Calculator";
let c = new Calculator();
test(c, "1+2*33/11="); // 9
μ΄μ μ΄κ²μ νμ₯νμ¬ 10μ΄ μλ λ€λ₯Έ μμ μ
λ ₯μ λν μ§μμ μΆκ°νκΈ° μν ProgrammerCalculator.ts
λ₯Ό μμ±ν΄ λ΄
μλ€.
import { Calculator } from "./Calculator";
class ProgrammerCalculator extends Calculator {
static digits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
constructor(public base: number) {
super();
if (base <= 0 || base > ProgrammerCalculator.digits.length) {
throw new Error("base has to be within 0 to 16 inclusive.");
}
}
protected processDigit(digit: string, currentValue: number) {
if (ProgrammerCalculator.digits.indexOf(digit) >= 0) {
return currentValue * this.base + ProgrammerCalculator.digits.indexOf(digit);
}
}
}
// μλ‘κ² νμ₯λ κ³μ°κΈ°λ₯Ό κ³μ°κΈ°λ‘ export ν©λλ€.
export { ProgrammerCalculator as Calculator };
// λν ν¬νΌ ν¨μλ₯Ό export ν©λλ€.
export { test } from "./Calculator";
λ€μμ μ°λ¦¬μ ProgrammerCalculator ν΄λμ€μ λν ν
μ€νΈμ
λλ€.
μλ‘μ΄ λͺ¨λ ProgrammerCalculator
λ μλ Calculator
λͺ¨λκ³Ό λΉμ·ν API ννμ export νμ§λ§ μλ³Έ λͺ¨λμ μ΄λ ν κ°μ²΄λ 보κ°νμ§ μμ΅λλ€.
λ€μμ ProgrammerCalculator ν΄λμ€μ λν ν μ€νΈμ λλ€:
import { Calculator, test } from "./ProgrammerCalculator";
let c = new Calculator(2);
test(c, "001+010="); // 3
λͺ¨λ κΈ°λ° μ‘°μ§μΌλ‘ μ²μ μ΄λν λμ νΈλ λλ μΆκ° λ€μ μ€νμ΄μ€ κ³μΈ΅μ exportsλ₯Ό λννλ κ²μ
λλ€.
λͺ¨λμλ μ체μ μΈ μ€μ½νκ° μμΌλ©° exports μ μΈλ§ λͺ¨λ μΈλΆμμ λ³Ό μ μμ΅λλ€.
μ΄λ₯Ό μΌλμ λκ³ λ€μμ€νμ΄μ€λ λͺ¨λμ μ¬μ©ν λ λ§€μ° μμ κ°μ μ 곡ν©λλ€.
μ‘°μ§ μΈ‘λ©΄μμλ λ€μμ€νμ΄μ€κ° λ
Όλ¦¬μ μΌλ‘ κ΄λ ¨λ κ°μ²΄μ νμ
μ μ μ μ€μ½νλ‘ κ·Έλ£Ήνν λ νΈλ¦¬ν©λλ€.
μλ₯Ό λ€μ΄ C#μμλ System.Collectionsμ λͺ¨λ 컬λ μ
νμ
μ μ°Ύμ΅λλ€.
νμ
μ κ³μΈ΅μ λ€μμ€νμ΄μ€λ‘ ꡬμ±νμ¬ μ΄λ¬ν νμ
μ μ¬μ©μμκ² νλ₯ν "λ°κ²¬" κ²½νμ μ 곡ν©λλ€.
λ°λ©΄ λͺ¨λμ νμμ μΌλ‘ νμΌ μμ€ν
μ μ΄λ―Έ μ‘΄μ¬ν©λλ€.
κ²½λ‘μ νμΌ μ΄λ¦μΌλ‘ ν΄κ²°ν΄μΌ νλ―λ‘ μ¬μ©ν μμλ λ
Όλ¦¬μ μ‘°μ§ μ²΄κ³κ° μμ΅λλ€.
λͺ©λ‘ λͺ¨λμ΄ ν¬ν¨λ /collections/generic/ ν΄λλ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ μ μ€μ½νμμ μΆ©λλ μ΄λ¦μ μ§μ νμ§ μμΌλ €λ©΄ λ€μμ€νμ΄μ€κ° μ€μν©λλ€.
μλ₯Ό λ€μ΄ My.Application.Customer.AddForm
κ³Ό My.Application.Order.AddForm
κ°μ μ΄λ¦μ΄μ§λ§ λ€λ₯Έ λ€μμ€νμ΄μ€λ₯Ό κ°μ§ λ κ°μ§ νμ
μ΄ μμ μ μμ΅λλ€.
κ·Έλ¬λ μ΄κ²μ λͺ¨λκ³Ό κ΄λ ¨λ λ¬Έμ λ μλλλ€.
λͺ¨λ λ΄μμ λμΌν μ΄λ¦μ κ°μ§ λ κ°μ κ°μ²΄λ₯Ό κ°λ κ·Έλ΄λ―ν μ΄μ λ μμ΅λλ€.
μ¬μ©μλ λͺ¨λμ μ°Έμ‘°νλ λ° μ¬μ©ν μ΄λ¦μ μ ννκ² λλ―λ‘ μ°μ°ν μ΄λ¦ μΆ©λμ λΆκ°λ₯ν©λλ€.
λͺ¨λκ³Ό λ€μμ€νμ΄μ€μ λν μμΈν λ΄μ©μ [λ€μ μ€νμ΄μ€μ λͺ¨λ](./Namespaces and Modules.md)μ μ°Έμ‘°νμΈμ.
λ€μμ λͺ¨λ λͺ¨λ ꡬ쑰νλ₯Ό μν μν μμλ€μ
λλ€.
μ΄ μ€ νλλΌλ νμΌμ μ μ©λλ κ²½μ° μΈλΆ λͺ¨λμ λ€μμ€νμ΄μ€λ₯Ό μ§μ νλ €κ³ νμ§ μλμ§ λ€μ νμΈνμΈμ.
- μ€μ§ μ΅μμ λ 벨 μ μΈλ§
export namespace Foo { ... }
μΈ νμΌ (Foo
λ₯Ό μ κ±°νκ³ λͺ¨λ κ²μ 'μλ‘' μ΄λμν€μΈμ) - λ¨μΌ
export class
λλexport function
κ° μλ νμΌ (export default
μ¬μ©μ κ³ λ €νμΈμ) - μ΅μμ νμΌ μμΉμ λμΌν
export namespace Foo {
λ₯Ό κ°μ§ λ€μμ νμΌ (μ΄κ²λ€μ΄Foo
νλλ‘ κ²°ν©λ κ²μ΄λΌκ³ μκ°νμ§ λ§μΈμ!)