[TIL] 221120

BeanxxΒ·2022λ…„ 11μ›” 20일
0

TIL

λͺ©λ‘ 보기
99/120
post-thumbnail

πŸ”₯ 였늘 ν•œ 일

  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ Lv.1 콜라 문제, ν‘Έλ“œ 파이트 λŒ€νšŒ 2문제 μ™„λ£Œ
  • [Udemy TS] Section1-2(TS κΈ°λ³Έ & κΈ°λ³Έ νƒ€μž…) ν•™μŠ΅
  • 개인 ν”Œμ  TS둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 진행쀑

🚨 Error Handling

νƒ€μŠ€ ν”Œμ  쀑 λ°œμƒν•œ μ•„λž˜ μ—λŸ¬λ“€μ€ μ•„λž˜ ν¬μŠ€νŠΈμ— λ”°λ‘œ ν¬μŠ€νŒ…ν•¨!

πŸ”— [TS - Error Handling] JS β†’ TS λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 쀑 맞λ‹₯뜨린 error λͺ¨μŒzip

1️⃣ An import path cannot end with a β€˜.ts’ extension.
2️⃣ err λΆ€λΆ„μ—μ„œμ˜ Object is of type β€˜unknown’ error

🧚 였늘 ν•™μŠ΅ν•œ λ‚΄μš©

πŸ’‘Β typescript 이둠

- μžμŠ€λŠ” 동적 νƒ€μž… (resolved at runtime)
- νƒ€μŠ€λŠ” 정적 νƒ€μž… (set during development)
- νƒ€μŠ€μ—μ„œ μ›μ‹œ νƒ€μž…μ€ λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ!

// ts 컴파일 λͺ…λ Ήμ–΄
tsc app.ts
// νƒ€μŠ€λŠ” μΆ”λ‘ λœ νƒ€μž…μ΄λ”λΌλ„ μΆ”λ‘ λœ νƒ€μž…μ— μ–΄κΈ‹λ‚˜λ©΄ μ—λŸ¬ 좜λ ₯!!

const number1 = 5; // νƒ€μž… 좔둠에 μ˜ν•΄ νƒ€μž…μ„ λ”°λ‘œ μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ 됨!

// μ²˜μŒμ— 값을 ν• λ‹Ήν•˜μ§€ μ•Šκ³  λ‚˜μ€‘μ— ν• λ‹Ήν•΄μ£ΌλŠ” κ²½μš°μ—” νƒ€μž… μ§€μ •ν•΄μ£ΌλŠ” 것이 μ’‹μŒ!
let number11: number; 
number1 = 5;

πŸŒ™ Tuple type

// Tuple: λ°°μ—΄κ³Ό ν˜•νƒœλŠ” κ°™μ§€λ§Œ 길이와 νƒ€μž…μ΄ 고정됨
// 첫번째 μ›μ†Œ νƒ€μž…μ€ number, λ‘λ²ˆμ§Έ μ›μ†Œ νƒ€μž…μ€ string으둜 κ³ μ •
role: [number, string];

// 배열에 μ •ν™•νžˆ x개의 값이 ν•„μš”ν•˜κ³ ,
// 각 κ°’μ˜ νƒ€μž…μ„ 미리 μ•Œκ³  μžˆλŠ” 상황에선 배열보단 νŠœν”Œ μ‚¬μš©μ΄ 적합!

person.role.push('admin'); 
// pushλŠ” μ˜ˆμ™Έμ μœΌλ‘œ νŠœν”Œμ—μ„œ ν—ˆμš©λ˜μ„œ νƒ€μŠ€κ°€ μ—λŸ¬λ₯Ό μž‘μ§€ λͺ»ν•¨,,
// But, 적어도 잘λͺ»λœ 값을 ν• λ‹Ήν•˜μ§„ μ•ŠμŒ!

person.role[1] = 10;
// index 1 자리의 νƒ€μž…μ€ string으둜 μ§€μ •λ˜μ–΄ μžˆμœΌλ―€λ‘œ 숫자 νƒ€μž… 값이 였면 error!!

person.role = [0, 'admin', 'user'];
// role은 2개의 μ›μ†Œλ§Œ 지닐 수 μžˆλ„λ‘ μ§€μ •ν–ˆλŠ”λ° μ›μ†Œ κ°œμˆ˜κ°€ 3κ°œλΌμ„œ error!!

πŸŒ™ Enum type

// enum {NEW, OLD}: [μ—΄κ±°ν˜•] μžμŠ€μ—μ„  μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©° νƒ€μŠ€μ—λ§Œ μ‘΄μž¬ν•˜λŠ” νƒ€μž…

enum Role { ADMIN, READ_ONLY, AUTHOR };
// μ‹œμž‘ 숫자λ₯Ό 0으둜 μ‹œμž‘ν•˜μ§€ μ•ŠμœΌλ €λŠ” 경우, μ‹λ³„μžμ— λ“±ν˜Έλ₯Ό μΆ”κ°€ν•˜μ—¬ λ‹€λ₯Έ 숫자 μž…λ ₯도 κ°€λŠ₯!
// enum Role { ADMIN = 5, READ_ONLY, AUTHOR = 'AUTHOR' };
// => 5 6 AUTHOR
// 숫자 말고도 문자 등도 ν• λ‹Ή κ°€λŠ₯!
role: Role.ADMIN

πŸŒ™ Type Alias (νƒ€μž… 별칭)

// type alias(별칭) => μž¬μ‚¬μš© κ°€λŠ₯
// Union Typeκ³Ό ν•¨κ»˜ μ“°λ©΄ κ΅³~! (+ λ³΅μž‘ν•œ 객체 νƒ€μž…μ—λ„ 별칭을 뢙일 수 있음!)
type Combinable = number | string;

// Union Type: μ—¬λŸ¬ νƒ€μž… μ§€μ •ν•˜κ³  싢을 λ•Œ μ‚¬μš©
input2: number | string

// Literal Type: μˆ«μžλ‚˜ λ¬Έμžμ—΄μ΄ μ•„λ‹Œ μ •ν™•ν•œ 값을 κ°€μ§€λŠ” νƒ€μž…
const num = 5;

πŸŒ™ Any type

// any: κ°€μž₯ μœ μ—°ν•œ νƒ€μž…μœΌλ‘œ, λͺ¨λ“  μ’…λ₯˜μ˜ κ°’ μ €μž₯ κ°€λŠ₯ + νƒ€μž… 확인 μˆ˜ν–‰ X
let anyArr: any[]; // λ­”κ°€λ₯Ό ν¬ν•¨ν•œ λ°°μ—΄
anyArr = ['hi', 10]; // μ–΄λ– ν•œ νƒ€μž…μ˜ μ›μ†Œκ°€ 와도 errorλ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•ŠμŒ
// But, any νƒ€μž… μ‚¬μš©μ‹œ νƒ€μŠ€μ˜ μž₯점이 사라져 자슀λ₯Ό μ“°λŠ” 것과 λ‹€λ₯Όκ²Œ μ—†μ–΄μ§€λŠ” 단점쓰.. 

πŸŒ™ Void type

// void: ν•¨μˆ˜μ— μ˜λ„μ μœΌλ‘œ λ°˜ν™˜λ¬Έμ΄ μ—†λ‹€λŠ” 것을 의미
// => 값을 λ°˜ν™˜ν•˜μ§€ μ•Šμ€ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 경우
// undefinedλŠ” μ‹€μ œ 값을 λ°˜ν™˜ν•˜μ§€ μ•Šμ„ λ•Œ μ‚¬μš© κ°€λŠ₯
// λ°˜ν™˜λ¬Έ(return)이 μ—†μœΌλ―€λ‘œ λ°˜ν™˜ νƒ€μž…μ΄ void둜 νƒ€μž… 좔둠됨
function printResult(num: number): void {
  console.log('Result: ' + num);
}

πŸŒ™ Function Type & Callback Type

// let combineValues: Function; // ν•¨μˆ˜ νƒ€μž… 지정.
// But, 잘λͺ»λœ ν•¨μˆ˜λ₯Ό μ €μž₯해도 errorλ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•Šκ³ , undefined 좜λ ₯,,

// ν•¨μˆ˜ 인자 개수, νƒ€μž… & λ°˜ν™˜ νƒ€μž…κΉŒμ§€ 지정
let combineValues: (a: number, b: number) => number;

// μ½œλ°±ν•¨μˆ˜ νƒ€μž… 지정
function addAndHandle(n1: number, n2: number, cb: (num: number) => void) {
  const result = n1 + n2;
  cb(result);
}

πŸŒ™ Unknown type

// unknown: any와 λΉ„μŠ·ν•˜μ§€λ§Œ λ‹€λ₯Έ νƒ€μž…μœΌλ‘œ, μ‚¬μš©μžκ°€ 무엇을 μž…λ ₯할지 μ•Œ 수 없을 λ•Œ μ‚¬μš©
// any보닀 unknown νƒ€μž… 지정이 λ‚˜μ€ μ΄μœ λŠ” νƒ€μž… 검사λ₯Ό μˆ˜ν–‰ν•  수 있기 λ•Œλ¬Έ!

let userInput: unknown;
let userName: string;

// unknown을 μ‚¬μš©ν•˜λŠ” 경우, userInput에 ν˜„μž¬ μ €μž₯된 νƒ€μž…μ„ 확인해야 μ›ν•˜λŠ” λ³€μˆ˜μ— ν• λ‹Ή κ°€λŠ₯
// userName = userInput; // string !== unknown =>  error!!

πŸŒ™ Never type

// μ—λŸ¬ 객체λ₯Ό μƒμ„±ν•˜μ—¬ λ„˜κΈ°λŠ” utility function
// => neverλ₯Ό λ°˜ν™˜ν•˜λ©°, λ°˜ν™˜κ°’μ„ μƒμ„±ν•˜μ§€ μ•ŠμŒ
// 이 ν•¨μˆ˜μ˜ λ°˜ν™˜ νƒ€μž…μœΌλ‘  void, never λͺ¨λ‘ κ°€λŠ₯ 

// 이 ν•¨μˆ˜λŠ” 아무것도 λ°˜ν™˜ν•˜μ§€ μ•Šκ³ ,
// 기본적으둜 슀크립트 일뢀λ₯Ό μΆ©λŒμ‹œν‚€κΈ° μœ„ν•œ κ²ƒμž„μ„ κ°œλ°œμžκ°€ μ•Œκ²Œ ν•  수 있음
function generateError(message: string, code: number): never {
  throw { message: message, errorCode: code };
}

πŸ‘€Β MEMO

# 폴더λͺ… λ³€κ²½ ν›„ 원격 μ €μž₯μ†Œμ— 같은 νŒŒμΌλ“€μ΄ λ‹΄κΈ΄ 두 개의 폴더가 μƒμ„±λ˜μ—ˆλ‹€..
# 폴더λͺ… λ³€κ²½ μ „μ˜ κΈ°μ‘΄ 폴더λ₯Ό μ‚­μ œν•˜κ³  싢을 λ•Œ
git add -u
git commit -a -m 'commit message'
git push

✍️ Diary

이제 μ’€ μ½”ν…Œ 문제 ν‘ΈλŠ”κ²Œ μž¬λ°Œλ‹€..? λ¬Όλ‘  λ¨Όκ°€ 풀릴 것 같은 κΈ°λ―Έκ°€ λ³΄μΌλ•Œ,, γ…Ž
νƒ€μŠ€ κ°•μ˜ λ“£κΈ° μ‹œμž‘ν–ˆλŠ”λ° 아직 기초 μ΄λ‘ μ΄μ—¬μ„œ κ·ΈλŸ°μ§€ μƒˆλ‘­κ³  생각보닀 μž¬λ―Έμ“° :>

profile
FE developer

0개의 λŒ“κΈ€