πŸ“˜ TypeScript/κ°œλ…

    [μ½”λ”©μ• ν”Œ] νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œμ˜ class : constructor, prototype νƒ€μž…μ§€μ •

    νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œ class의 constructor μ‚¬μš©ν•˜κΈ° 일반적인 JavaScript 클래슀 및 객체 μƒμ„±μ˜ μ˜ˆμ‹œμ΄λ‹€. // JavaScript class Candidate { constructor(personality, age, gender) { this.personality = personality; this.age = age; this.gender = gender; } } const candidate1 = new Candidate('good', 28, 'woman'); JavaScriptμ—μ„œλŠ” νƒ€μž… 정보λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έλ ‡κ²Œ λ•Œλ¬Έμ— μœ„μ²˜λŸΌλ§Œ ν‘œκΈ°ν•΄λ„ λ˜μ§€λ§Œ, νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” 각 속성과 λ§€κ°œλ³€μˆ˜μ— νƒ€μž…μ§€μ •μ„ ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€. // TypeScript class Candidate { ..

    [μ½”λ”©μ• ν”Œ] νƒ€μž…μŠ€ν¬λ¦½νŠΈ HTML μ‘°μž‘μ‹œ 주의점 (2) : 더 narrowingν•˜κΈ°

    μš°μ„ .. { "compilerOptions": { ... "strictNullChecks": true, ... }, } tsconfig.json νŒŒμΌμ—μ„œ strictNullCheck μ˜΅μ…˜μ„ true둜 λ°”κΎΌλ‹€. (ν˜Ήμ€ "strict" : true둜 써둬도 λœλ‹€) μ΄λ ‡κ²Œ μ„€μ •ν•˜λ©΄ TypeScript μ»΄νŒŒμΌλŸ¬λŠ” 더 μ—„κ²©ν•œ κ·œμΉ™μ„ μ μš©ν•˜λ©°, λ³€μˆ˜μ— λŒ€ν•œ null 체크가 κ°•μ œλœλ‹€. href μ‘°μž‘μ‹œ 였λ₯˜ let link = document.querySelector('#link'); if(link instanceof HTMLElement){ link.href = 'https://kakao.com'; } HTMLElement νƒ€μž…μ€ href 속성이 μ—†λ‹€λŠ” 였λ₯˜κ°€ λœ¬λ‹€. λ§ν¬νƒœκ·Έμ˜ κ²½μš°μ—λŠ” 쒀더 쒁게 narrowingν•΄..

    [μ½”λ”©μ• ν”Œ] νƒ€μž…μŠ€ν¬λ¦½νŠΈ HTML μ‘°μž‘μ‹œ 주의점 (1)

    μš°μ„ .. { "compilerOptions": { ... "strictNullChecks": true, ... }, } tsconfig.json νŒŒμΌμ—μ„œ strictNullCheck μ˜΅μ…˜μ„ true둜 λ°”κΎΌλ‹€. (ν˜Ήμ€ "strict" : true둜 써둬도 λœλ‹€) μ΄λ ‡κ²Œ μ„€μ •ν•˜λ©΄ TypeScript μ»΄νŒŒμΌλŸ¬λŠ” 더 μ—„κ²©ν•œ κ·œμΉ™μ„ μ μš©ν•˜λ©°, λ³€μˆ˜μ— λŒ€ν•œ null 체크가 κ°•μ œλœλ‹€. HTML μ‘°μž‘μ‹œ 였λ₯˜ let title = document.querySelector('#title'); title.innerHTML = 'μ•ˆλ…•ν•˜μ„Έμš”'; // title is possibly Element | null TypeScriptμ—μ„œ strictNullChecks μ˜΅μ…˜μ΄ ν™œμ„±ν™”λœ 경우, μœ„ λ©”μ„œλ“œμ˜ λ°˜ν™˜ νƒ€μž…μ€ Element | ..

    [μ½”λ”©μ• ν”Œ] ν•¨μˆ˜μ™€ object λ©”μ„œλ“œμ— type alias μ§€μ •ν•˜κΈ°

    ν•¨μˆ˜ type alias ν•¨μˆ˜ νƒ€μž…λ„ type alias둜 μ €μž₯ν•΄μ„œ μ“Έ 수 μžˆλ‹€. type NumOut = (x : number, y : number ) => number let ABC :NumOut = function(x,y){ return x + y } function ν‚€μ›Œλ“œμ—λŠ” νŒŒλΌλ―Έν„° λ‚΄λΆ€λ‚˜ {} λ°”λ‘œ μ™Όμͺ½μ—λ§Œ νƒ€μž…μ§€μ •μ΄ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— function ν•¨μˆ˜μ΄λ¦„ :NumOut (){} ν˜•νƒœλŠ” μ‚¬μš©ν•  수 μ—†μ–΄μ„œ μœ„ μ½”λ“œμ²˜λŸΌ μ‚¬μš©ν•œλ‹€. *** μ£Όμ˜μ‚¬ν•­ : ν•¨μˆ˜ type aliasλ₯Ό λΆ€μ°©ν•˜λ €λ©΄ ν•¨μˆ˜ν‘œν˜„μ‹μœΌλ‘œ 써야 ν•œλ‹€. object λ©”μ„œλ“œ type alias type Member = { name : string, age : number, plusOne : ( x :number ) => number, c..

    [μ½”λ”©μ• ν”Œ] νƒ€μž…μ„ νŠΉμ • κ°’μœΌλ‘œ μ§€μ •ν•˜μž : Literal Types (+ as const)

    Literal Types νƒ€μž…μ§€μ •μ„ λ”μš± strictν•˜κ²Œ νŠΉμ • κΈ€μžλ‚˜ 숫자만 κ°€μ§ˆ 수 있게 μ œν•œμ„ λ‘˜ 수 μžˆλ‹€. // λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ νƒ€μž…μ„ μ‚¬μš©ν•œ νŒŒλΌλ―Έν„° function greet(name: "Alice" | "Bob"): "Hello, Alice!" | "Hello, Bob!" { return `Hello, ${name}!`; } // 숫자 λ¦¬ν„°λŸ΄ νƒ€μž…μ„ μ‚¬μš©ν•œ νŒŒλΌλ―Έν„° function multiply(a: 2 | 3, b: 2 | 3): 6 { return a * b; } // λΆˆλ¦¬μ–Έ λ¦¬ν„°λŸ΄ νƒ€μž…μ„ μ‚¬μš©ν•œ 리턴값 function isAdmin(userType: "admin" | "regular"): boolean { return userType === "admin"; } // μ‚¬μš© μ˜ˆμ‹œ consol..

    [μ½”λ”©μ• ν”Œ] νƒ€μž…μ„ λ³€μˆ˜μ— λ‹΄μž : type alias

    type alias νƒ€μž…μ„ λ³€μˆ˜μ— 담을 수 μžˆλ‹€. type aliasλŠ” 영문 λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜λŠ” κ·œμΉ™μ΄ μžˆλ‹€. type Name = string | number; let 이름 :Name = 'kim'; type MyObject = { name? : string, age : number } let 철수 :MyObject = { name : 'kim', age : 50 } Object λ³€κ²½ μ—λŸ¬λ„μš°κΈ° type MyObject = { readonly name : string, } let 철수 :MyObject = { name : 'kim', } 철수.name = 'Park'; // μ—λŸ¬ constλŠ” λ³€μˆ˜ μž¬ν• λ‹Ήμ΄ λΆˆκ°€λŠ₯ν•˜μ§€λ§Œ, object의 λ‚΄λΆ€ 속성은 λ³€κ²½ν•  수 μžˆλ‹€. νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” 이것에 μ—λŸ¬λ₯Ό λ„μšΈ 수..