λ°˜μ‘ν˜•

🍰 TypeGuardλž€?

TypeScriptμ—μ„œ λ³€μˆ˜μ˜ νƒ€μž…μ„ 보μž₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” κΈ°λŠ₯

 

TypeScriptμ—μ„œλŠ” 정적 νƒ€μž… 검사λ₯Ό μˆ˜ν–‰ν•˜μ—¬ 컴파일 νƒ€μž„μ— μ½”λ“œμ—μ„œ λ°œμƒν•  수 μžˆλŠ” νƒ€μž… κ΄€λ ¨ 였λ₯˜λ₯Ό μ˜ˆλ°©ν•  수 μžˆλ‹€.

ν•˜μ§€λ§Œ κ²½μš°μ— 따라 λ³€μˆ˜μ˜ νƒ€μž…μ΄ λ™μ μœΌλ‘œ 변경될 수 μžˆλŠ” κ²½μš°κ°€ μžˆλ‹€.

 

이런 κ²½μš°μ— TypeGuardλ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜μ˜ νƒ€μž…μ„ ν™•μΈν•˜κ³ , ν•΄λ‹Ή νƒ€μž…μœΌλ‘œ μ½”λ“œλ₯Ό μ•ˆμ „ν•˜κ²Œ μ‹€ν–‰ν•  수 μžˆλ„λ‘ 보μž₯ν•œλ‹€.

 

TypeGuardλŠ” 주둜 쑰건뢀 νƒ€μž…κ³Ό ν•¨κ»˜ μ‚¬μš©λ˜λ©°, λ³€μˆ˜κ°€ νŠΉμ • νƒ€μž…μΈμ§€ μ—¬λΆ€λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.

 

🍰 TypeGuard κ·œμΉ™

TypeGuard ν•¨μˆ˜λŠ” is ν‚€μ›Œλ“œλ‘œ μ‹œμž‘ν•˜λŠ” 이름을 가진 ν•¨μˆ˜λ‘œ ν‘œν˜„λœλ‹€.

ν•¨μˆ˜μ˜ 이름은 is λ‹€μŒμ— κ²€μ‚¬ν•˜κ³ μž ν•˜λŠ” νƒ€μž…μ˜ 이름이 μ˜¨λ‹€. 예λ₯Ό λ“€μ–΄, λ‹€μŒμ€ isNumberλΌλŠ” μ΄λ¦„μ˜ TypeGuard ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” μ˜ˆμ‹œμ΄λ‹€.

 

function isNumber(value: unknown): value is number {
  return typeof value === 'number';
}

μœ„ μ½”λ“œμ—μ„œ isNumber ν•¨μˆ˜λŠ” valueκ°€ number νƒ€μž…μΈμ§€ κ²€μ‚¬ν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό boolean κ°’μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.

λ°˜ν™˜κ°’μœΌλ‘œ value is numberλ₯Ό μ‚¬μš©ν•˜λŠ”λ°, 이것은 λ°˜ν™˜κ°’μ΄ true일 λ•Œ valueκ°€ number νƒ€μž…μž„μ„ λ‚˜νƒ€λ‚Έλ‹€.

 

λ”°λΌμ„œ, isNumber ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 검사할 λ•ŒλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•  수 μžˆλ‹€.

 

function processValue(value: unknown) {
  if (isNumber(value)) {
    // value is number
    console.log(value + 1);
  } else {
    console.log('value is not a number');
  }
}

 

isNumber ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ valueλ₯Ό κ²€μ‚¬ν•  λ•Œ, if (isNumber(value)) λ¬Έμž₯을 μ‚¬μš©ν•œλ‹€.

이 λ•Œ isNumber(value)의 λ°˜ν™˜κ°’μ΄ true일 λ•Œ, valueλŠ” number νƒ€μž…μ΄ 되고, 이λ₯Ό ν™œμš©ν•˜μ—¬ μ•ˆμ „ν•˜κ²Œ 연산을 μˆ˜ν–‰ν•  수 μžˆλ‹€.

 

valueκ°€ number νƒ€μž…μ΄ 아닐 경우, else 블둝이 μ‹€ν–‰λ˜μ–΄ μ²˜λ¦¬λœλ‹€.

TypeGuard ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬, λ³€μˆ˜κ°€ νŠΉμ • νƒ€μž…μΈμ§€ κ²€μ‚¬ν•˜κ³  κ·Έ 결과에 따라 μ•ˆμ „ν•˜κ²Œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€.

λ°˜μ‘ν˜•

'Basic > TypeScript' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

error TS18046: 'err' is of type 'unknown' μ—λŸ¬ ν•΄κ²°  (0) 2023.05.12
TypeScriptλž€?  (0) 2022.10.30
Typescriptλ₯Ό μ΄μš©ν•œ tree 순회 μ½”λ“œ  (0) 2022.07.26