TypeScript | 🌹Type Aliases, Literal Types, Union Types, Intersection

κΆŒκΈ°ν˜„Β·2021λ…„ 2μ›” 10일
0

TypeScript

λͺ©λ‘ 보기
2/3

TypeScript의 κ½ƒπŸŒΉμ΄λΌκ³  ν•˜λŠ” μΉœκ΅¬λ“€μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

🌟1. Type Aliases

  • Type aliasesλŠ” νƒ€μž…μ˜ μƒˆλ‘œμš΄ 이름을 λ§Œλ“€ 수 μžˆλ‹€.
    : μƒˆλ‘œμš΄ νƒ€μž…μ„ μ‚¬μš©μžκ°€ μ •μ˜ ν•  수 μžˆλ‹€λŠ” 것.
    : μƒˆλ‘œμš΄ μœ ν˜•μ„ μƒμ„±ν•˜λŠ” 것이 μ•„λ‹Œ ν•΄λ‹Ήν•˜λŠ” μœ ν˜•μ„ μ°Έμ‘°ν•˜λŠ” μƒˆλ‘œμš΄ 이름(νƒ€μž…)을 λ§Œλ“ λ‹€.
  • Primitive Typeκ³Ό Objective Type λͺ¨λ‘ μ •μ˜ν•  수 μžˆλ‹€.
    :μ›μ‹œ νƒ€μž…μ˜ κ²½μš°μ—λŠ” aliasingν•  수 μžˆμ§€λ§Œ μœ μš©ν•˜μ§€λŠ” μ•Šλ‹€.

🌟🌟2. Literal Types

  • String, Numeric, Boolean μ„Έ 가지 μœ ν˜•μ˜ Literal Typesκ°€ μžˆλ‹€.
  • Literal Typesλ₯Ό μ΄μš©ν•˜μ—¬ string, number, boolean νƒ€μž…μ— μžˆμ–΄μ•Όν•˜λŠ” μ •ν™•ν•œ(정해진) 값을 ν• λ‹Ήν•  수 μžˆλ‹€.
  • μ—­ν•  ( Literal Narrowing )
    : μ–΄λ–€ λ³€μˆ˜μ˜ νƒ€μž…μ΄ 'string'라면, λ¬΄ν•œν•œ stringνƒ€μž…μ˜ λ¬Έμžμ—΄μ΄ 할당될 수 μžˆλ‹€. μˆ˜λ§Žμ€ μΌ€μ΄μŠ€κ°€ μ‘΄μž¬ν•  수 μžˆκ²Œλ˜λŠ”λ°
    λ¬΄ν•œν•œ μΌ€μ΄μŠ€λ₯Ό μ’€ 더 μž‘κ³  μœ ν•œν•œ μΌ€μ΄μŠ€λ‘œ λ§Œλ“€ 수 μžˆλ‹€. => Union Types와 κ²°ν•©ν•˜μ—¬!!

2-1. String Literal Types

: λ¬Έμžμ—΄μ„ νƒ€μž…μœΌλ‘œ 지정할 수 μžˆλ‹€.
: 즉, λ¬Έμžμ—΄λ‘œ μ§€μ •λœ νƒ€μž…μ„ κ°€μ§€λŠ” λ³€μˆ˜λΌλ©΄ κ·Έ λ³€μˆ˜λŠ” 주어진 νƒ€μž…μ— ν• λ‹Ήλœ λ¬Έμžμ—΄λ§Œ 할당될 수 μžˆλ‹€.

2-2. Numeric Literal Types

: String Literal Typesκ³Ό λΉ„μŠ·ν•˜κ²Œ λ™μž‘ν•œλ‹€.

2-3. Boolean Literal Types

🌟3. Union Types

βœ… TIP!⇨ OR의 κ°œλ…μ„ μƒκ°ν•˜λ©΄ λœλ‹€.

  • union은 ν•˜λ‚˜ λ˜λŠ” 두 가지 νƒ€μž…μ„ κ²°ν•©ν•˜λŠ” κΈ°λŠ₯μœΌλ‘œμ„œ μ—¬λŸ¬ νƒ€μž… 쀑 ν•˜λ‚˜ 일 수 μžˆλŠ” 값을 ν‘œν˜„ν•˜λŠ” 방법
  • λ‘κ°œ μ΄μƒμ˜ 데이터 νƒ€μž…μ„ νŒŒμ΄ν”„ 기호 (|)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‘°ν•©λ˜μ–΄ unionν˜•μ‹μ„ λ‚˜νƒ€λ‚Έλ‹€.
  • 주둜 Literal Types와 ν•¨κ»˜ μ‚¬μš©λœλ‹€.
  • νŠΉμ • νƒ€μž…μœΌλ‘œ νƒ€μž…μ˜ λ²”μœ„λ₯Ό μ’νžˆλŠ” 것에 ν™œμš©( Type guard )

🌟🌟🌟Discriminating Unions

ν˜„μž¬ μ‚¬μš©λ˜λŠ” μΌ€μ΄μŠ€(νƒ€μž…)λ₯Ό 쒁힐 수 μžˆλŠ” Literal typesλ₯Ό μ‚¬μš©ν•œ ν•˜λ‚˜μ˜ fieldλ₯Ό κ³΅ν†΅μ μœΌλ‘œ 가지고 μžˆλŠ” Unionsλ₯Ό 톡해 κ΅¬ν˜„ν•  수 μžˆλŠ” κΈ°μˆ μ΄λ‹€.
μ΄λ•Œ κ³΅ν†΅μ μœΌλ‘œ 가지고 μžˆλŠ” ν•˜λ‚˜μ˜ fieldλŠ” λ™μΌν•œ 킀와 λ‹€λ₯Έ 값을 가지고 μžˆμ–΄μ•Όν•œλ‹€.

βœ… POINT⇨ μ–΄λ–€ μΌ€μ΄μŠ€λ“ , κ³΅ν†΅λœ ν‚€λ₯Ό κ°€μ§€λŠ” ν•˜λ‚˜μ˜ filedλ₯Ό λ§Œλ“€κ³  κ·Έ fieldμ—λŠ” 각 Unionλ§ˆλ‹€ λ‹€λ₯Έ 값을 κ°€μ§€κ²Œ ν•΄μ„œ Union Type을 κ΅¬λ³„ν•˜κΈ° μ‰½κ²Œ λ§Œλ“ λ‹€.

  • μ§κ΄€μ μœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.
  • 가독성 μžˆλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€

( μ›λ¬ΈμœΌλ‘œ κ³΅μ‹λ¬Έμ„œλ₯Ό λ³΄λŠ” 것을 μ—°μŠ΅ν•˜κ³  μžˆμ–΄μ„œ μ˜μ—­ν•΄μ„œ μ λŠ” 것이 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. πŸ˜­γ…œγ…œ)

μ•„λž˜μ˜ 예λ₯Ό 보면 더 μ‰½κ²Œ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ—μ„œ λ§ν•œ 각각의 interfaceμ—λŠ” "isValid" λΌλŠ” κ³΅ν†΅λœ ν•˜λ‚˜μ˜ filedκ°€ 있고, κ·Έ fieldλŠ” Boolean Literal Types둜 λ‹€λ₯Έ 값이 μž‘μ„±λ˜μ–΄ μžˆλŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μ—¬κΈ°μ„œ "isValid"λŠ” Union Type( type ValidationResult )에 μ‚¬μš©λ˜λŠ” 두 νƒ€μž…μ„ ν•˜λ‚˜μ˜ ν•„λ“œ( "isValid" )λ₯Ό ν†΅ν•΄μ„œ μ‰½κ²Œ κ΅¬λΆ„ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

*Discriminate: μ°¨λ³„ν™”ν•˜λ‹€, κ΅¬λ³„ν•˜λ‹€

4. Intersection

βœ… TIP!⇨ & 의 κ°œλ…μ„ μƒκ°ν•˜λ©΄ λœλ‹€.

  • μ—¬λŸ¬ νƒ€μž…μ„ μ•°νΌμƒŒλ“œ(&) 기호둜 μ΄μ–΄μ„œ μΈν„°μ„Ήμ…˜ νƒ€μž…μ„ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.
  • A & B νƒ€μž…μ˜ 값은 A νƒ€μž…μ—λ„, B νƒ€μž…μ—λ„ ν• λ‹Ή κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€. λ§Œμ•½ A와 B λͺ¨λ‘ 객체 νƒ€μž…μ΄λΌλ©΄ A & B νƒ€μž…μ˜ κ°μ²΄λŠ” A와 B νƒ€μž… 각각에 μ •μ˜λœ 속성 λͺ¨λ‘λ₯Ό κ°€μ Έμ•Ό ν•œλ‹€.

type EmployeeλŠ” ProgrammerInfo 와 Privacy에 μ •μ˜λœ λͺ¨λ“  데이터λ₯Ό 전달해야 ν•œλ‹€.

참고자료 | TypeScript Handbook Reference
참고자료 | TypeScript Handbook | Literal Types
참고자료 | TypeScript Handbook | Unions and Intersection Types

profile
ν•¨κ»˜ μΌν•˜κ³  싢은 개발자λ₯Ό λͺ©ν‘œλ‘œ 맀일을 λ…Έλ ₯ν•˜κ³ , μ˜·μ„ μ’‹μ•„ν•˜λŠ” κΆŒκΈ°ν˜„ μž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€