Skip to content

Latest commit

Β 

History

History
100 lines (70 loc) Β· 4.72 KB

File metadata and controls

100 lines (70 loc) Β· 4.72 KB

μ†Œκ°œ (Introduction)

이번 μž₯μ—μ„œλŠ” TypeScript의 νƒ€μž… 좔둠을 λ‹€λ£¨κ² μŠ΅λ‹ˆλ‹€. 즉 νƒ€μž…μ΄ μ–΄λ””μ—μ„œ, μ–΄λ–»κ²Œ μΆ”λ‘ λ˜λŠ”μ§€ μ΄μ•ΌκΈ°ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

κΈ°λ³Έ (Basic)

TypeScriptμ—μ„œλŠ” νƒ€μž… ν‘œκΈ°κ°€ μ—†λŠ” 경우 νƒ€μž… 정보λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄ νƒ€μž…μ„ μΆ”λ‘ ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 이 μ½”λ“œμ—μ„œ

let x = 3;

λ³€μˆ˜ x 의 νƒ€μž…μ€ number둜 μΆ”λ‘ λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 좔둠은 λ³€μˆ˜μ™€ 멀버λ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³ , λ§€κ°œλ³€μˆ˜μ˜ κΈ°λ³Έκ°’λ₯Ό μ„€μ •ν•˜λ©°, ν•¨μˆ˜μ˜ λ°˜ν™˜ νƒ€μž…μ„ κ²°μ •ν•  λ•Œ λ°œμƒν•©λ‹ˆλ‹€.

λŒ€λΆ€λΆ„μ˜ κ²½μš°μ— νƒ€μž… 좔둠은 μ§κ΄€μ μž…λ‹ˆλ‹€. νƒ€μž…μ„ μΆ”λ‘ ν•˜λŠ” 방법에 λŒ€ν•΄ μ’€ 더 μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

졜적 곡톡 νƒ€μž… (Best common type)

μ—¬λŸ¬ ν‘œν˜„μ‹μ—μ„œ νƒ€μž… 좔둠이 λ°œμƒν•  λ•Œ, ν•΄λ‹Ή ν‘œν˜„μ‹μ˜ νƒ€μž…μ„ μ‚¬μš©ν•˜μ—¬ "졜적 곡톡 νƒ€μž…"을 κ³„μ‚°ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄,

let x = [0, 1, null];

μœ„ 예제의 x νƒ€μž…μ„ μΆ”λ‘ ν•˜λ €λ©΄ 각 λ°°μ—΄ μš”μ†Œλ“€μ˜ νƒ€μž…μ„ κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ λ°°μ—΄μ˜ νƒ€μž…μœΌλ‘œ κ³ λ₯Ό 수 μžˆλŠ” 두 κ°€μ§€ 후보가 μžˆμŠ΅λ‹ˆλ‹€: number와 nullμž…λ‹ˆλ‹€. 졜적 곡톡 νƒ€μž… μ•Œκ³ λ¦¬μ¦˜μ€ 각 후보 νƒ€μž…μ„ κ³ λ €ν•˜μ—¬ λͺ¨λ“  후보 νƒ€μž…μ„ 포함할 수 μžˆλŠ” νƒ€μž…μ„ μ„ νƒν•©λ‹ˆλ‹€.

후보 νƒ€μž…λ“€λ‘œλΆ€ν„° 졜적 곡톡 νƒ€μž…μ„ μ„ νƒν•˜κΈ° λ•Œλ¬Έμ—, λͺ¨λ“  후보 νƒ€μž…μ„ 포함할 수 μžˆλŠ” μƒμœ„ νƒ€μž…μ΄ μ‘΄μž¬ν•΄λ„ 후보 νƒ€μž… 쀑 μƒμœ„ νƒ€μž…μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ 선택할 수 μ—†μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄:

let zoo = [new Rhino(), new Elephant(), new Snake()];

μ΄μƒμ μœΌλ‘œλŠ” zoo λ³€μˆ˜κ°€ Animal[] νƒ€μž…μœΌλ‘œ μΆ”λ‘ λ˜κΈΈ μ›ν•˜μ§€λ§Œ, λ°°μ—΄ 쀑 Animal νƒ€μž…μ˜ 객체가 μ—†κΈ° λ•Œλ¬Έμ— Animal을 λ°°μ—΄ μš”μ†Œ νƒ€μž…μœΌλ‘œ μΆ”λ‘ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” λͺ¨λ“  후보 νƒ€μž…μ„ ν¬ν•¨ν•˜λŠ” μƒμœ„ νƒ€μž…μ„ ν‘œκΈ°ν•΄μ•Ό ν•©λ‹ˆλ‹€.

let zoo: Animal[] = [new Rhino(), new Elephant(), new Snake()];

졜적 곡톡 νƒ€μž…μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 경우, μΆ”λ‘ μ˜ κ²°κ³ΌλŠ” (Rhino | Elephant | Snake)[]κ³Ό 같은 μœ λ‹ˆμ–Έ λ°°μ—΄ νƒ€μž…μž…λ‹ˆλ‹€.

λ¬Έλ§₯상 타이핑 (Contextual Typing)

TypeScriptμ—μ„œλŠ” κ²½μš°μ— 따라 "λ‹€λ₯Έ λ°©ν–₯"μ—μ„œλ„ νƒ€μž…μ„ μΆ”λ‘ ν•©λ‹ˆλ‹€. 이λ₯Ό "λ¬Έλ§₯상 타이핑" 이라고 ν•©λ‹ˆλ‹€. λ¬Έλ§₯상 타이핑은 ν‘œν˜„μ‹μ˜ νƒ€μž…μ΄ ν•΄λ‹Ή μœ„μΉ˜μ— μ˜ν•΄ μ•”μ‹œλ  λ•Œ λ°œμƒν•©λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄:

window.onmousedown = function(mouseEvent) {
    console.log(mouseEvent.button);   //<- 성곡
    console.log(mouseEvent.kangaroo); //<- 였λ₯˜!
};

μ—¬κΈ°μ—μ„œ TypeScript νƒ€μž… κ²€μ‚¬λŠ” Window.onmousedown ν•¨μˆ˜ νƒ€μž…μ„ μ‚¬μš©ν•˜μ—¬ ν• λ‹Ή 였λ₯Έμͺ½μ— ν•¨μˆ˜ ν‘œν˜„μ‹μ˜ νƒ€μž…μ„ μΆ”λ‘ ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν–ˆμ„ λ•Œ mouseEvent λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ΄ button ν”„λ‘œνΌν‹°λŠ” μžˆμ§€λ§Œ, kangaroo ν”„λ‘œνΌν‹°λŠ” μ—†μŒμ„ μΆ”λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

TypeScriptλŠ” λ‹€λ₯Έ λ¬Έλ§₯μ—μ„œλ„ νƒ€μž… 좔둠을 μž˜ν•΄λƒ…λ‹ˆλ‹€.

window.onscroll = function(uiEvent) {
    console.log(uiEvent.button); //<- 였λ₯˜!
}

μœ„ ν•¨μˆ˜κ°€ Window.onscroll에 ν• λ‹Ήλ˜μ–΄ μžˆλ‹€λŠ” 사싀을 기반으둜, TypeScriptλŠ” uiEventκ°€ 이전 예제의 MouseEventκ°€ μ•„λ‹Œ UIEvent μž„μ„ μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€. UIEvent κ°μ²΄μ—λŠ” button ν”„λ‘œνΌν‹°κ°€ μ—†μ–΄μ„œ TypeScriptκ°€ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€.

λ§Œμ•½ 이 ν•¨μˆ˜κ°€ λ¬Έλ§₯적으둜 νƒ€μž…μ΄ μΆ”λ‘ λ˜μ§€ μ•ŠλŠ” μœ„μΉ˜μ— μžˆλ‹€λ©΄, ν•¨μˆ˜μ˜ μΈμˆ˜λŠ” μ•”λ¬΅μ μœΌλ‘œ any νƒ€μž…μ„ κ°€μ§€λ©° λ³„λ„μ˜ 였λ₯˜λ₯Ό λ³΄κ³ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. (--noImplicitAny μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄)

const handler = function(uiEvent) {
    console.log(uiEvent.button); //<- 성곡
}

μš°λ¦¬λŠ” ν•¨μˆ˜μ˜ 인수 νƒ€μž…μ„ any νƒ€μž… ν‘œκΈ°ν•˜μ—¬ μž¬μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

window.onscroll = function(uiEvent: any) {
    console.log(uiEvent.button);  //<- 이제 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŒ
};

ν•˜μ§€λ§Œ uiEventλŠ” button ν”„λ‘œνΌν‹°κ°€ μ—†κΈ° λ•Œλ¬Έμ— 이 μ½”λ“œλŠ” undefined을 좜λ ₯ν•©λ‹ˆλ‹€.

λ¬Έλ§₯상 타이핑은 λ§Žμ€ κ²½μš°μ— μ μš©λ©λ‹ˆλ‹€. 일반적인 경우, ν•¨μˆ˜ 호좜 인수, ν• λ‹Ήμ˜ 였λ₯Έμͺ½, νƒ€μž… 단언, 객체 / λ°°μ—΄ λ¦¬ν„°λŸ΄μ˜ 멀버, λ°˜ν™˜λ¬Έμ΄ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έλ§₯상 νƒ€μž…μ€ 졜적 곡톡 νƒ€μž…μ˜ 후보 νƒ€μž…μœΌλ‘œλ„ μ‚¬μš©λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄:

function createZoo(): Animal[] {
    return [new Rhino(), new Elephant(), new Snake()];
}

이 μ˜ˆμ œμ—μ„œ 졜적 곡톡 νƒ€μž…μ€ 4κ°€μ§€ 후보 νƒ€μž…μ„ κ°€μ§‘λ‹ˆλ‹€: Animal, Rhino, Elephant, and Snake. 이듀 쀑, Animal이 졜적 곡톡 νƒ€μž… μ•Œκ³ λ¦¬μ¦˜μ— μ˜ν•΄ μ„ νƒλ©λ‹ˆλ‹€.