μνλ API ννλ₯Ό μ 곡νλ λͺ¨λμ λ§λλ κ²μ κΉλ€λ‘μΈ μ μμ΅λλ€.
μλ₯Ό λ€μ΄, new
μ μ¬μ©μ λ°λΌ νΈμΆν λ λ€λ₯Έ νμ
μ μμ±νλ λͺ¨λμ μν μ μκ³ ,
κ³μΈ΅μ λ
ΈμΆ λ λ€μν λͺ
λͺ
λ νμ
μ κ°μ§κ³ μμΌλ©°,
λͺ¨λ κ°μ²΄μ λν μ¬λ¬ νλ‘νΌν°λ κ°μ§ μ μμ΅λλ€.
μ΄ κ°μ΄λμμλ, μ΅μν APIλ₯Ό λ ΈμΆνλ 볡μ‘ν μ μ νμΌμ λν΄ μμ±νλ λꡬλ₯Ό μ 곡ν©λλ€. λν μ΅μ μ΄ λ€μνκΈ° λλ¬Έμ μ¬κΈ°μλ λͺ¨λ (λλ UMD) λΌμ΄λΈλ¬λ¦¬μ μ€μ μ λ‘λλ€.
TypeScript μλ λ°©μμ λν΄ μ¬λ¬ μ£Όμ κ°λ μ μ΄ν΄νμ¬ μ μμ ννλ₯Ό λ§λλ λ°©λ²μ μμ ν μ΄ν΄ν μ μμ΅λλ€.
μ΄ κ°μ΄λλ₯Ό μ½κ³ μλ€λ©΄, μλ§λ TypeScriptμ νμ μ λν΄ μ΄λ―Έ μκ³ μμ κ²μ λλ€. λ³΄λ€ λͺ ννκ²νκΈ° μν΄, λ€μκ³Ό κ°μ΄ νμ μ΄ λμ λ©λλ€:
- νμ
λ³μΉ μ μΈ (
type sn = number | string;
) - μΈν°νμ΄μ€ μ μΈ (
interface I { x: number[]; }
) - ν΄λμ€ μ μΈ (
class C { }
) - μ΄κ±°ν μ μΈ (
enum E { A, B, C }
) - νμ
μ κ°λ¦¬ν€λ
import
μ μΈ
μ΄λ¬ν κ° μ μΈ ννλ μλ‘μ΄ νμ μ΄λ¦μ λ§λλλ€.
νμ
κ³Ό λ§μ°¬κ°μ§λ‘ κ°μ΄ 무μμΈμ§ μ΄λ―Έ μκ³ μμ κ²μ
λλ€.
κ°μ ννμμμ μ°Έμ‘°ν μ μλ λ°νμ μ΄λ¦μ
λλ€.
μλ₯Ό λ€μ΄ let x = 5;
μμλ x
λΌκ³ λΆλ¦¬λ κ°μ μμ±ν©λλ€.
λ€μ λͺ ννκ² λ§νμλ©΄, λ€μκ³Ό κ°μ΄ κ°μ λ§λλλ€:
let
,const
, 그리κ³var
μ μΈ- κ°μ ν¬ν¨νλ
λ€μμ€νμ΄μ€
λλλͺ¨λ
μ μΈ μ΄κ±°ν
μ μΈν΄λμ€
μ μΈ- κ°μ μ°Έμ‘°νλ
import
μ μΈ ν¨μ
μ μΈ
νμ
μ λ€μμ€νμ΄μ€ μμ μ‘΄μ¬ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, let x: A.B.C
μ΄λ μ μΈμ΄ μλ€λ©΄,
νμ
C
λ A.B
λ€μμ€νμ΄μ€μμ μ¨ κ² μ
λλ€.
μ΄ κ΅¬λ³μ λ―Έλ¬νμ§λ§ μ€μν©λλ€ -- μ¬κΈ°μ A.B
λ νμ
μ΄κ±°λ κ°μΌ νμλ μμ΅λλ€.
κ°λ¨ν μ‘°ν©: νλμ μ΄λ¦, μ¬λ¬ μλ―Έ (Simple Combinations: One name, multiple meanings)
A
λΌλ μ΄λ¦μ΄ μμΌλ©΄, A
μ λν΄ νμ
, κ° λλ λ€μμ€νμ΄μ€λΌλ μΈ κ°μ§ λ€λ₯Έ μλ―Έλ₯Ό μ°Ύμ μ μμ΅λλ€.
μ΄λ¦μ ν΄μνλ λ°©λ²μ μ¬μ©νλ 컨ν
μ€νΈμ λ°λΌ λ€λ¦
λλ€.
μλ₯Ό λ€μ΄ let m: A.A = A;
μ μΈμμ,
A
λ λ¨Όμ λ€μμ€νμ΄μ€λ‘ μ¬μ© λ λ€μ, νμ
μ μ΄λ¦μΌλ‘, κ·Έ λ€μ κ°μΌλ‘ μ¬μ©λ©λλ€.
μ¦ μμ ν λ€λ₯Έ μ μΈμ μλ―Έν μ μμ΅λλ€!
μ½κ°μ νΌλμ€λ¬μ 보μ΄μ§λ§, κ³Όνκ² μ¬μ©νμ§ μλ ν μ€μ λ‘ λ§€μ° νΈλ¦¬ν©λλ€. κ²°ν© λμμ μ μ©ν μΈ‘λ©΄μ μ΄ν΄ λ³΄κ² μ΅λλ€.
μ리ν μ¬λμ΄λΌλ©΄, νμ
κ³Ό κ° λͺ©λ‘μμ ν΄λμ€
κ° λ λ€ λμ¨ κ²μ λμΉμ±μ κ²μ
λλ€.
class C { }
μ μΈμ λ κ°μ§λ₯Ό λ§λλλ€:
ν΄λμ€ μΈμ€ν΄μ€μ ννλ₯Ό λνλ΄λ νμ
C
μ
ν΄λμ€ μμ±μλ₯Ό λνλ΄λ κ° C
μ
λλ€.
μ΄κ±°ν μ μΈλ λΉμ·νκ² λμν©λλ€.
λͺ¨λ νμΌ foo.d.ts
μ μμ±νμ΅λλ€:
export var SomeVar: { a: SomeType };
export interface SomeType {
count: number;
}
κ·Έ λ€μ μ¬μ©νμ΅λλ€:
import * as foo from './foo';
let x: foo.SomeType = foo.SomeVar.a;
console.log(x.count);
μ μλνμ§λ§, SomeType
κ³Ό SomeVar
λ μ΄λ¦μ΄ κ°λλ‘
λ°μ νκ² κ΄λ ¨λμ΄ μλ€κ³ μμν μ μμ΅λλ€.
κ²°ν©μ μ¬μ©νμ¬ κ°μ μ΄λ¦ Bar
λ‘ λ κ°μ§ λ€λ₯Έ κ°μ²΄ (κ°κ³Ό νμ
)λ₯Ό νμ ν μ μμ΅λλ€:
export var Bar: { a: Bar };
export interface Bar {
count: number;
}
μ΄ κ²½μ° μ¬μ©νλ μ½λλ₯Ό ꡬ쑰 λΆν΄ν μ μλ μμ£Ό μ’μ κΈ°νμ λλ€:
import { Bar } from './foo';
let x: Bar = Bar.a;
console.log(x.count);
μ¬κΈ°μλ Bar
λ₯Ό νμ
κ³Ό κ°μΌλ‘ μ¬μ©νμ΅λλ€.
Bar
κ°μ Bar
νμ
μΌλ‘ μ μΈν νμκ° μλ€λ μ μ μ μνμΈμ -- μ λμ λ
립μ μ
λλ€.
μ μΈμ μ¬λ¬ κ°μ μ μΈμ κ±Έμ³ κ²°ν©λ μ μμ΅λλ€.
μλ₯Ό λ€μ΄, class C { }
μ interface C { }
κ°μ΄ κ²°ν©ν μ μμΌλ©° λ λ€ C
νμ
μ νλ‘νΌν°λ₯Ό μΆκ°ν©λλ€.
μΆ©λμ μΌμΌν€μ§ μλλ€λ©΄ μΆ©λΆν ν©λ²μ μ
λλ€.
μΌλ°μ μΈ κ²½ν λ²μΉμ κ°μ μ΄λ¦μ΄ λ€μμ€νμ΄μ€
λ‘ μ μΈλμ§ μλ ν νμ κ°μ μ΄λ¦μ λ€λ₯Έ κ°κ³Ό μΆ©λνκ³ ,
νμ
λ³μΉ μ μΈ(type s = string
)μΌλ‘ μ μΈ λ κ²½μ° νμ
μ΄ μΆ©λνλ©°,
λ€μμ€νμ΄μ€μλ μ λλ‘ μΆ©λνμ§ μλ κ²μ
λλ€.
μ΄λ»κ² μ¬μ©λλμ§ μ΄ν΄λ³΄κ² μ΅λλ€.
μΈν°νμ΄μ€
μ λ€λ₯Έ μΈν°νμ΄μ€
μ μΈμ μ¬μ©νμ¬ λ©€λ²λ₯Ό μΆκ°ν μ μμ΅λλ€:
interface Foo {
x: number;
}
// ... λ€λ₯Έ μμΉ ...
interface Foo {
y: number;
}
let a: Foo = ...;
console.log(a.x + a.y); // μ±κ³΅
ν΄λμ€μλ κ°μ΄ λμν©λλ€:
class Foo {
x: number;
}
// ... λ€λ₯Έ μμΉ ...
interface Foo {
y: number;
}
let a: Foo = ...;
console.log(a.x + a.y); // μ±κ³΅
λ¨, νμ
λ³μΉ (type s = string;
)μλ μΈν°νμ΄μ€λ₯Ό μ¬μ©ν΄μ μΆκ°ν μ μμ΅λλ€.
λ€μμ€νμ΄μ€
μ μΈμ μΆ©λμ μΌμΌν€μ§ μλ λ°©μμΌλ‘ μλ‘μ΄ νμ
, κ° κ·Έλ¦¬κ³ λ€μμ€νμ΄μ€λ₯Ό μΆκ°ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, ν΄λμ€μ μ μ λ©€λ²λ₯Ό μΆκ°ν μ μμ΅λλ€:
class C {
}
// ... λ€λ₯Έ μμΉ ...
namespace C {
export let x: number;
}
let y = C.x; // μ±κ³΅
μ μμ μμ C
μ μ μ μΈ‘λ©΄(μμ±μ ν¨μ)μ κ°μ μΆκ°νμ΅λλ€.
κ°μ μΆκ° νκ³ λͺ¨λ κ°μ λν 컨ν
μ΄λκ° λ€λ₯΄κΈ° λλ¬Έμ
λλ€.
(νμ
μ λ€μμ€νμ΄μ€μ ν¬ν¨λκ³ λ€μμ€νμ΄μ€λ λ€λ₯Έ λ€μμ€νμ΄μ€μ ν¬ν¨λ©λλ€).
λ€μμ€νμ΄μ€ νμ μ ν΄λμ€μ μΆκ°ν μ μμ΅λλ€:
class C {
}
// ... λ€λ₯Έ μμΉ ...
namespace C {
export interface D { }
}
let y: C.D; // μ±κ³΅
μ΄ μμ μμ namespace
μ μΈμ μμ±ν λκΉμ§ λ€μμ€νμ΄μ€ C
λ μμμ΅λλ€.
λ€μμ€νμ΄μ€ C
λ ν΄λμ€μ μν΄ μμ±λ C
μ κ° λλ νμ
κ³Ό μΆ©λνμ§ μμ΅λλ€.
λ§μ§λ§μΌλ‘ namespace
μ μΈμ μ¬μ©νμ¬ λ€μν λ³ν©μ ν μ μμ΅λλ€.
νΉν νμ€μ μΈ μλ μλμ§λ§, ν₯λ―Έλ‘μ΄ λμμ νμΈν μ μμ΅λλ€:
namespace X {
export interface Y { }
export class Z { }
}
// ... λ€λ₯Έ μμΉ ...
namespace X {
export var Y: number;
export namespace Z {
export class C { }
}
}
type X = string;
μ μμ μμ 첫 λ²μ§Έ λΈλ‘μ λ€μ μ΄λ¦μ μλ―Έλ₯Ό λ§λλλ€:
- κ°
X
(λ€μμ€νμ΄μ€
μ μΈμ κ°Z
λ₯Ό ν¬ν¨νκΈ° λλ¬Έμ λλ€) - λ€μμ€νμ΄μ€
X
(λ€μμ€νμ΄μ€
μ μΈμ νμY
λ₯Ό ν¬ν¨νκΈ° λλ¬Έμ λλ€) X
λ€μμ€νμ΄μ€ μμ νμY
X
λ€μμ€νμ΄μ€ μμ νμZ
(ν΄λμ€μ μΈμ€ν΄μ€ νν)X
κ°μ νλ‘νΌν°μΈ κ°Z
(ν΄λμ€μ μμ±μ ν¨μ)
λ λ²μ§Έ λΈλ‘μ λ€μ μ΄λ¦μ μλ―Έλ₯Ό λ§λλλ€:
X
κ°μ νλ‘νΌν°μΈ κ°Y
(number
νμ )- λ€μμ€νμ΄μ€
Z
X
κ°μ νλ‘νΌν°μΈ κ°Z
X.Z
λ€μμ€νμ΄μ€ μμ νμC
X.Z
κ°μ νλ‘νΌν°μΈ κ°C
- νμ
X
μ€μν κ·μΉμ export
μ import
μ μΈμ΄ λμμ λͺ¨λ μλ―Έ λ₯Ό λ΄λ³΄λ΄κ±°λ κ°μ Έμ¨λ€λ κ² μ
λλ€.