TypeScript - Generics

Typescript Generics(μ œλ„€λ¦­)

단일 μœ ν˜•μ΄ μ•„λ‹Œ λ‹€μ–‘ν•œ μœ ν˜•μ—μ„œ μž‘λ™λ μˆ˜ μžˆλŠ” 컴포먼트 μž‘μ„±μ΄ κ°€λŠ₯ν•˜λ‹€.

μ „λ‹¬λœ argament와 λ™μΌν•œ μœ ν˜•μ„ return ν•˜λŠ” 경우

  function identity(arg: number): number {
    return arg;
  }

λ§Œμ•½ 문자λ₯Ό μž…λ ₯ν•˜λŠ” κ²½μš°μ—λŠ” 문자용으둜 μƒˆ ν•¨μˆ˜λ₯Ό μƒμ„±ν•΄μ•Όλœλ‹€.

any μœ ν˜•μ„ μ‚¬μš©ν•  경우

  function identity(arg: any): any {
    return arg;
  }

any μœ ν˜•μ„ μ‚¬μš©ν•˜μ—¬ λ§Œλ“€μ–΄λ„ λ˜μ§€λ§Œ λ°˜ν™˜λ λ•Œ ν•΄λ‹Ή μœ ν˜•μ˜ 정보가 μ†μ‹€λ˜μ–΄λ„ μ •μƒμ μœΌλ‘œ λ°˜ν™˜μ΄ 될수 μžˆλ‹€λŠ” λ¬Έμ œκ°€ μžˆλ‹€.

μž¬λ„€λ¦­ μ‚¬μš© ν›„

  function identity<T>(arg: T): T {
    return arg;
  }

identity ν•¨μˆ˜μ— β€˜T’ λΌλŠ” μœ ν˜•λ³€μˆ˜λ₯Ό argμ—μ„œ μΊ‘μ²˜ν•˜μ—¬ returnν• λ•Œ μ‚¬μš©ν•œλ‹€. μ΄λ‘œμΈν•΄ λ°˜ν™˜μ•Œλ•Œλ„ λ™μΌν•œ μœ ν˜•λ§Œ λ°˜ν™˜ κ°€λŠ₯ν•˜λ‹€.

μ‚¬μš©λ²•

  identity<'string'>('hello world!!')

identity ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν• λ•Œ λ¨Όμ € νƒ€μž…μ„ μ„ μ–Έν•˜λŠ” 방법이닀

μ‚¬μš©λ²•2

  identity('hello world!!')

μž…λ ₯받은 argament의 νƒ€μž…μ„ μœ μΆ”ν•΄ λ‚΄λŠ” 방법이닀. μ»΄νŒŒμΌλŸ¬κ°€ μœ μΆ”ν•˜μ§€ λͺ»ν•˜λŠ” κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄ μ΄λ ‡κ²Œ μ“°λŠ”κ²Œ 읽기 더 읽기 μ‰¬μ›Œ 보인닀.

Generics μ œμ•½ 방법

  interface Animal {
    name: string;
  }
  function identity<T extends Animal>(arg: T): T {
    return arg;
  }

λ§Œμ•½ identity에 β€˜nameβ€™μ΄λΌλŠ” 속성이 μžˆλŠ” μœ ν˜•μœΌλ‘œ μ œν•œν•˜κ³  μ‹Άλ‹€λ©΄ β€˜.name’ 속성을 가진 interfaceλ₯Ό λ§Œλ“€κ³  extends둜 μ œμ•½ 쑰건을 λ‚˜νƒ€λ‚΄λ©΄ λœλ‹€.


@κΉ€λŒ€μ™„
μ•ˆλ…•ν•˜μ„Έμš”

AboutGitHub