πŸ“ƒ Front-End/TypeScript

πŸ“ƒ Front-End/TypeScript

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“ˆ

ES6 와 λΉ„μŠ· ν•©λ‹ˆλ‹€. λͺ¨λ“ˆμ€ μ „μ—­ λ³€μˆ˜μ™€ κ΅¬λΆ„λ˜λŠ” 자체 유효 λ²”μœ„λ₯Ό 가지며 export, import 와 같은 ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λ‹€λ₯Έ νŒŒμΌμ—μ„œ μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ‚¬μš©λ°©λ²• βœ” Export ES6의 export와 같은 λ°©μ‹μœΌλ‘œ λ³€μˆ˜, ν•¨μˆ˜, νƒ€μž…, μΈν„°νŽ˜μ΄μŠ€ 등에 λΆ™μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€. // types.ts export interface Todo { title: string; checked: boolean; } βœ” Import ES6의 import와 λ™μΌν•œ λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. // app.ts import { Todo } from './types' let item: Todo = { title: 'ν•  일 1', checked: false } βœ” Tip import λ₯Ό μž…λ ₯ν•˜κ³  {} 빈 객체λ₯Ό λ¨Όμ € ..

πŸ“ƒ Front-End/TypeScript

νƒ€μž… ν˜Έν™˜(Type Compatibility)

νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ½”λ“œμ—μ„œ νŠΉμ • νƒ€μž…μ΄ λ‹€λ₯Έ νƒ€μž…μ— 잘 λ§žλŠ”μ§€λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. βœ” ꡬ쑰적 타이핑 μ˜ˆμ‹œ ꡬ쑰적 타이핑(structural typing)μ΄λž€ μ½”λ“œ ꡬ쑰 κ΄€μ μ—μ„œ νƒ€μž…μ΄ μ„œλ‘œ ν˜Έν™˜λ˜λŠ”μ§€μ˜ μ—¬λΆ€λ₯Ό νŒλ‹¨ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. βœ” μΈν„°νŽ˜μ΄μŠ€ interface Developer{ name: string; skill: string; } interface Person{ name: string; } let developer: Developer; let person: Person; developer = person; // μ—λŸ¬μ΄μœ  : μ™Όμͺ½μ— μžˆλŠ” λ³€μˆ˜κ°€ 더 큰 관계λ₯Ό 가지고 μžˆμ–΄μ„œ person = developer; // μ—λŸ¬κ°€ μ•ˆλœ¬λ‹€. 였λ₯Έμͺ½μ— μžˆλŠ” νƒ€μž…μ΄ 더 λ§Žμ€ 속성을 κ°€μ§€κ±°λ‚˜, ꡬ쑰적으둜 더 컸을 λ•Œ μ™Όμͺ½κ³Ό ν˜Έν™˜μ΄..

πŸ“ƒ Front-End/TypeScript

νƒ€μž… κ°€λ“œ(Type Guard)

νŠΉμ • νƒ€μž…μœΌλ‘œ νƒ€μž…μ˜ λ²”μœ„λ₯Ό μ’ν˜€λ‚˜κ°€λŠ”(필터링 ν•˜λŠ”) κ³Όμ • μ„€λͺ…ν•˜κΈ° μœ„ν•œ 사전 예제 interface Developer{ name: string; skill: string; } interface Person { name: string; age: number; } function introduce(): Developer | Person{ return {name: 'Tony', age: 33, skill:"Iron Making"} } let tony = introduce(); console.log(tony.skill); // μœ λ‹ˆμ˜¨ νŠΉμ§•μ— μ˜ν•΄ μ ‘κ·Ό λΆˆκ°€ // νƒ€μž… 단언을 μ‚¬μš©ν•˜μ—¬ μ ‘κ·Ό if((tony as Developer).skill){ let skill = (tony as Developer).skill..

πŸ“ƒ Front-End/TypeScript

νƒ€μž… 단언(Type Assertion)

νƒ€μž…μŠ€ν¬λ¦½νŠΈ 보닀 κ°œλ°œμžκ°€ 더 νƒ€μž…μ„ 잘 μ•Œκ³  μžˆλ‹€λŠ” 가정을 ν•˜κ³  'κ°œλ°œμžκ°€ μ •μ˜ν•œ νƒ€μž…μœΌλ‘œ κ°„μ£Όλ₯Ό 해라' λΌλŠ” 의미 μž…λ‹ˆλ‹€. as ν‚€μ›Œλ“œ μ‚¬μš©ν•œ ν›„ νƒ€μž… 적기 let a; // νƒ€μž… 좔둠에 μ˜ν•΄ any νƒ€μž… a = 20; a = 'a'; let b = a; // a의 νƒ€μž…μ΄ λ°”λ€Œκ³  할당을 ν•˜μ—¬λ„ 아직 νƒ€μž… 좔둠에 μ˜ν•΄ a: any νƒ€μž… // 맨 처음 ν• λ‹Ήν•œ νƒ€μž…μ˜ 값이 κ·ΈλŒ€λ‘œ b에 λ“€μ–΄κ°€μ„œ b: any νƒ€μž… κ°œλ°œμžκ°€ λ³΄λŠ” κ΄€μ μ—μ„œλŠ” a κ°€ string 이 될 것이라고 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ νƒ€μž…μŠ€ν¬λ¦½νŠΈ κ΄€μ μ—μ„œλŠ” 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. μ•„λž˜μ™€ 같이 μ‚¬μš©ν•˜λ©΄ νƒ€μž…μ΄ 개발자의 κ΄€μ μœΌλ‘œ 단언이 λ©λ‹ˆλ‹€. let b = a as string; a λΌλŠ” 것은 string 으둜 κ°„μ£Ό ν•©λ‹ˆλ‹€. 즉, b 의 νƒ€μž…μ€ str..

πŸ“ƒ Front-End/TypeScript

νƒ€μž… μΆ”λ‘ (Type Inference)

νƒ€μž… μΆ”λ‘ μ΄λž€ νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ μ½”λ“œλ₯Ό 해석해 λ‚˜κ°€λŠ” λ™μž‘μ„ μ˜λ―Έν•©λ‹ˆλ‹€. βœ” νƒ€μž… μΆ”λ‘ μ˜ κΈ°λ³Έ let x = 3; μœ„μ™€ 같이 x에 λŒ€ν•œ νƒ€μž…μ„ λ”°λ‘œ μ§€μ •ν•˜μ§€ μ•Šλ”λΌλ„ 일단 xλŠ” number둜 κ°„μ£Όλ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ±°λ‚˜ μ΄ˆκΈ°ν™” ν•  λ•Œ νƒ€μž…μ΄ μΆ”λ‘ λ©λ‹ˆλ‹€. 이외에도 λ³€μˆ˜, 속성, 인자의 κΈ°λ³Έ κ°’, ν•¨μˆ˜μ˜ λ°˜ν™˜ κ°’ 등을 μ„€μ •ν•  λ•Œ νƒ€μž… 좔둠이 μΌμ–΄λ‚©λ‹ˆλ‹€. βœ” μΈν„°νŽ˜μ΄μŠ€μ™€ μ œλ„€λ¦­μ„ μ΄μš©ν•œ νƒ€μž… μΆ”λ‘  interface Dropdown{ value: T; title: string; } let shoppingItem: Dropdown = { value: 'abc', title: 'hello' } μ œλ„€λ¦­μ„ μ΄μš©ν•΄ string 을 λ„˜κ²ΌκΈ° λ•Œλ¬Έμ—, value 의 νƒ€μž…μ€ string이 λ©λ‹ˆλ‹€. interface Dro..

πŸ“ƒ Front-End/TypeScript

μ œλ„€λ¦­(Generics)

βœ” 사전적 μ •μ˜ μ œλ„€λ¦­μ€ C#, Java λ“±μ˜ μ–Έμ–΄μ—μ„œ μž¬μ‚¬μš©μ„±μ΄ 높은 μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€ λ•Œ 자주 ν™œμš©λ˜λŠ” νŠΉμ§•μž…λ‹ˆλ‹€. 특히, ν•œκ°€μ§€ νƒ€μž…λ³΄λ‹€ μ—¬λŸ¬ 가지 νƒ€μž…μ—μ„œ λ™μž‘ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό μƒμ„±ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€. μ œλ„€λ¦­(Generics) μ •μ˜ ❓ μ œλ„€λ¦­μ΄λž€ νƒ€μž…μ„ 마치 ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°μ²˜λŸΌ μ‚¬μš©ν•˜λŠ” 것 βœ” 기본적인 문법 ν‚€μ›Œλ“œ μ‚¬μš© // JS ν•¨μˆ˜ μ‚¬μš© μ‹œ function logText(text){ console.log(text); return text; } logText(10); // 숫자 logText('hello'); // λ¬Έμžμ—΄ logText(true); // μ§„μœ„κ°’ // TS - μ œλ„€λ¦­ function logText(text: T):T{ console.log(text); return text; } logT..

πŸ“ƒ Front-End/TypeScript

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ 클래슀

βœ” μžλ°”μŠ€ν¬νŒνŠΈμ˜ 클래슀 // 기쑴의 μƒμ„±μž ν•¨μˆ˜ function Person(name, age){ this.name = name; this.age = age; } var seho = new Person('μ„Έν˜Έ', 30) // 클래슀 class Person{ // 클래슀 둜직 constructor(name, age){ console.log('생성 λ˜μ—ˆμŠ΅λ‹ˆλ‹€'); this.name = name; this.age = age; } } var seho = new Person('μ„Έν˜Έ', 30); console.log(seho) μœ„μ˜ 두 개의 μ½”λ“œλŠ” κ°™μŠ΅λ‹ˆλ‹€. βœ” νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ 클래슀 문법적인 차이가 μžˆμŠ΅λ‹ˆλ‹€. class Person { name: string; // class μ•ˆμ—μ„œλ§Œ μ‚¬μš©ν•˜κ³  μ‹ΆμœΌλ©΄ μ•žμ— pri..

πŸ“ƒ Front-End/TypeScript

Enum ( μ΄λ„˜ )

νŠΉμ • κ°’λ“€μ˜ 집합을 μ˜λ―Έν•˜λŠ” μžλ£Œν˜• βœ” μˆ«μžν˜• μ΄λ„˜ enum Shoes{ Nike, // 0 Adidas // 1 } let myShoes = Shoes.Nike; console.log(myShoes); // 0 λ³„λ„μ˜ 값을 μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ μˆ«μžν˜•μœΌλ‘œ μ·¨κΈ‰ ν•©λ‹ˆλ‹€. enum Direction { Up = 1, Down, Left, Right } // κ²°κ³Ό Up - 1 Down - 2 Left - 3 Right - 4 βœ” λ¬Έμžν˜• μ΄λ„˜ enum Shoes{ Nike = 'λ‚˜μ΄ν‚€', Adidas = 'μ•„λ””λ‹€μŠ€' } let myShoes = Shoes.Nike; console.log(myShoes);// 'λ‚˜μ΄ν‚€' μ˜ˆμ‹œ βœ” μ‚¬μš©ν•˜κΈ° μ „ function askQuestion(answer: string){ if(a..

HoHo.dev
'πŸ“ƒ Front-End/TypeScript' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘