πŸ“˜ TypeScript - κΈ°λ³Έ νƒ€μž…

zooyahoΒ·2022λ…„ 9μ›” 6일
0
post-thumbnail

πŸ”΅ core types

  1. string
  2. number
  3. boolean
  4. object
  5. Array
  6. Tuple
  7. Enum
  8. Any
  9. undefined
  10. Function
  11. unKnown
  12. never

● νŠœν”Œ(Tuple)

  • νƒ€μž…κ³Ό 길이가 κ³ μ •λœ λ°°μ—΄
  • 🚨 pushλŠ” μ˜ˆμ™Έμ μœΌλ‘œ νŠœν”Œμ—μ„œ ν—ˆμš©ν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€.

πŸ‘Ύ role

let person: {
  name: string;
  age: number;
  role: [number, string];
} = {
  name: 'zooyaho',
  age: 25,
  role: [2, 'admin'],
}

person.role.push('author'); // errorλ₯Ό λ°œμƒν•˜μ§€ μ•ŠμŒ!

● μ—΄κ±°ν˜•(Enum)

  • μ‚¬μš©μž 지정 방식
  • μ‹λ³„μžλ“€μ„ μ€‘κ΄„ν˜Έ 쌍 μ•ˆμ— λ„£λŠ” 방식이며 μ—΄κ±° λͺ©λ‘μ„ 제곡
  • 이 라벨듀은 0λΆ€ν„° μ‹œμž‘ν•˜λŠ” 숫자둜 λ³€ν™˜λœλ‹€.
  • μ‹œμž‘ 값을 =을 μ‚¬μš©ν•˜μ—¬ νƒ€μž…λΆˆλ¬Έ 값을 λ³€κ²½ν•  수 μžˆλ‹€.

πŸ‘Ύ
: role의 idλŠ” 각각 κ΄€λ¦¬μžλŠ” 0, 읽기 μ „μš© μ‚¬μš©μžλŠ” 1, μž‘μ„±μžλŠ” 2

// 0, 1, 2κ°€ 각각 할당됨
enum Role { ADMIN, READ_ONLY, AUTHOR };
/*
enum Role { ADMIN = 5, READ_ONLY, AUTHOR };
-> AUTHOR은 각각 5, 6, 7이 할당됨
*/

let person = {
  name: 'zooyaho',
  age: 25,
  role: Role.ADMIN,
}

if(person.role === Role.ADMIN) {
  console.log("is Admin!!");
}

● Any

  • κ°€μž₯ μœ μ—°ν•œ νƒ€μž…μ΄λ©° λͺ¨λ“  μ’…λ₯˜μ˜ 값을 μ €μž₯ν•  수 μžˆλ‹€.
  • anyμ‚¬μš© μ‹œ μ»΄νŒŒμΌλŸ¬κ°€ 검사할 뢀뢄이 μ—†μ–΄μ Έ μ»΄νŒŒμΌλŸ¬κ°€ μž‘λ™ν•˜μ§€ μ•Šκ²Œ 됨.
  • νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ μ£ΌλŠ” μž₯점을 λͺ¨λ‘ μƒμ‡„μ‹œμΌœ 바닐라 μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ“°λŠ” 것과 λ‹€λ₯Ό λ°” μ—†κ²Œ λœλ‹€.
  • let은 기본적으둜 anyνƒ€μž…μ΄ μ§€μ •λœλ‹€.

πŸ”΅ λ¦¬ν„°λŸ΄ νƒ€μž…

  • μ •ν™•ν•œ 값을 κ°€μ§€λŠ” νƒ€μž…
  • stringμ΄λ‚˜ number와 같은 핡심 νƒ€μž…μ„ 기반으둜 함.
  • μœ λ‹ˆμ–Έ νƒ€μž…μ˜ λ§₯λ½μ—μ„œλ„ μ‚¬μš©ν•  수 있으며, μ½”λ“œμ— ν•˜λ“œμ½”λ”©ν•  수 μžˆλŠ” μ •ν™•ν•œ κ°’λ§Œ ν—ˆμš©ν•˜λŠ”κ²Œ μ•„λ‹Œ λ‘κ°œ μ΄μƒμ˜ κ°€λŠ₯ν•œ 값을 κ°€μ§€λ €λŠ” 경우 μ‚¬μš©ν•¨.

πŸ”΅ 별칭(ALias)

  • typeν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μž¬μ‚¬μš© κ°€λŠ₯ν•œ νƒ€μž… 별칭을 μƒμ„±ν•˜μ—¬ μ‚¬μš©
  • type μ‚¬μš©μž μ •μ˜ νƒ€μž… | μ•Œλ¦¬μ–΄μŠ€ 이름
  • μœ λ‹ˆμ˜¨ νƒ€μž…, λ³΅μž‘ν•œ 객체 νƒ€μž… 등에도 별칭 μ‚¬μš©
type Combinable = number | string;

function combine(input1: Combinable, input2: Combinable){...}

πŸ”΅ ν•¨μˆ˜ νƒ€μž… μ •μ˜

● ν•¨μˆ˜μ˜ λ°˜ν™˜ νƒ€μž… μ •μ˜

  • :을 μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜ λ°˜ν™˜νƒ€μž…μ„ μ •μ˜ν•  수 μžˆλ‹€.
  • undefinedλ₯Ό λΉ„λ‘―ν•΄ 아무것도 λ°˜ν™˜ν•˜μ§€ μ•ŠμœΌλ©΄ :voidλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
  • ν•¨μˆ˜κ°€ 아무것도 λ°˜ν™˜ν•˜μ§€ μ•ŠμœΌλ©΄(return이 μ—†μœΌλ©΄) μžλ™μœΌλ‘œ undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.
  • ν•˜μ§€λ§Œ return이 μ—†λŠ” 것과 return undefined은 νƒ€μž… 지정 μ‹œ λ‹€λ₯΄λ‹€. return이 μ—†λŠ” 것 | return;은 :void둜, return undefined; 은 :undefined으둜 μ •ν™•νžˆ λͺ…μ‹œν•΄μ•Ό ν•œλ‹€.

● ν•¨μˆ˜ νƒ€μž… μ •μ˜(Function)

  • let fn : Function으둜 μ‹λ³„μžμ— Functionνƒ€μž…μ„ μ§€μ •ν•œλ‹€.
  • ν•¨μˆ˜ νƒ€μž…μ€ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜κ°’μ— κ΄€λ ¨λœ ν•¨μˆ˜λ₯Ό μ„€λͺ…ν•˜λŠ” ν•¨μˆ˜λ‘œ ν™”μ‚΄ν‘œν•¨μˆ˜ ν‘œκΈ°λ²•μœΌλ‘œ μ„€μ •ν•  수 μžˆλ‹€.

πŸ‘Ύ Functionνƒ€μž… 지정

function add(n1:number, n2:number){...}
let combineFn: Function;

combineFn = 5; // error
combineFn = add; 

πŸ‘Ύ ν™”μ‚΄ν‘œν•¨μˆ˜ ν‘œκΈ°λ²•μœΌλ‘œ ν•¨μˆ˜νƒ€μž… 지정

// λ§€κ°œλ³€μˆ˜λ₯Ό μ·¨ν•˜μ§€ μ•ŠλŠ” numberλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜ νƒ€μž…
// let combineFn: () => number;
let combineFn: ( a:number, b:number ) => number;

combineFn = 5; // error
combineFn = add; 

● ν•¨μˆ˜ νƒ€μž… 및 콜백

  • 콜백 νƒ€μž…μ˜ λ°˜ν™˜ νƒ€μž…μ„ void둜 μ„€μ •ν–ˆμ„ λ•Œ, μ½œλ°±ν•¨μˆ˜μ— λ°˜ν™˜κ°’μ„ 섀정해도 errorκ°€ λ°œμƒν•˜μ§€ μ•Šλ„ return이 λ¬΄μ‹œλœλ‹€. 이것은 νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ 버그가 μ•„λ‹ˆλ‹€.
  • 콜백 ν•¨μˆ˜λŠ” μžμ‹ μ΄ μ „λ‹¬λ˜λŠ” μΈμˆ˜κ°€ λ°˜ν™˜ 값을 κΈ°λŒ€ν•˜μ§€ μ•ŠλŠ” κ²½μš°μ—λ„ 값을 λ°˜ν™˜ν•  수 μžˆλ‹€.
  • ν•¨μˆ˜ νƒ€μž… 지정은 기본적으둜 λ§€κ°œλ³€μˆ˜μ—λŠ” μ—„κ²©ν•˜μ§€λ§Œ, λ°˜ν™˜ νƒ€μž…μ—λŠ” 크게 κ°„μ—¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
function addAndHandle(n1:number, n2:number, cb: (num: number) => void) {
  const result = n1 + n2;
  cb(result);
}

addAndHandle(2, 3, (result) => {
  console.log(result);
})
/*
addAndHandle(2, 3, (result) => {
  console.log(result);
  return result; // errorκ°€ λ°œμƒν•˜μ§€ μ•ŠμŒ!!!
})
πŸ‘‰πŸ» return μž‘μ—…μ΄ λ¬΄μ‹œλœλ‹€!!
*/

πŸ”΅ μ•Œμˆ˜ μ—†λŠ” νƒ€μž…(unknown)

  • μ—λŸ¬ λ°œμƒ 없이 μ–΄λ–€ 값이든 μ €μž₯ν•  수 μžˆλ‹€.
  • anyμ™€λŠ” λ‹€λ₯΄κ²Œ μ’€ 더 μ œν•œμ μ΄λ‹€!
let userInput: unknown;
let userName: string;

userInput = 5;
userInput = 'Max';
userName = userInput; // error

πŸ‘‰πŸ» unknown은 string으둜 μΈμ‹λ˜μ§€ μ•Šμ•„ errorκ°€ λ°œμƒλœλ‹€!
πŸ‘‰πŸ» unknown을 any둜 λ³€κ²½ν•˜λ©΄ errorκ°€ λ°œμƒλ˜μ§€ μ•ŠλŠ”λ‹€.

πŸ‘Ύ μΆ”κ°€ 적인 νƒ€μž… 검사λ₯Ό 톡해 ν• λ‹Ήν•  수 μžˆλ‹€.

let userInput: unknown;
let userName: string;

if(typeOf userInput === 'string') {
	userName = userInput;
}

πŸ”΅ μ ˆλŒ€ νƒ€μž…(never)

  • 아무것도 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 ν™•μ‹€νžˆ ν•˜κΈ° μœ„ν•΄ neverλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ„€μ •ν•  수 μžˆλ‹€.
  • μ½”λ“œ ν’ˆμ§ˆμ˜ κ΄€μ μ—μ„œ μ˜λ„λ₯Ό 더 λΆ„λͺ…νžˆ ν•  수 μžˆλ‹€.
  • 기본적으둜 아무것도 λ°˜ν™˜ν•˜μ§€ μ•Šκ³ , μŠ€ν¬λ¦½νŠΈλ‚˜ 슀크립트의 일뢀λ₯Ό μΆ©λŒμ‹œν‚€κ±°λ‚˜ λ§κ°€νŠΈλ¦¬κΈ° μœ„ν•œ κ²ƒμž„μ„ μ½”λ“œλ₯Ό μ½λŠ” κ°œλ°œμžκ°€ μ•Œκ²Œ ν•  수 μžˆλ‹€.
function generateError(message: string, code: number){
  throw { message: message, errorCode: code }
}
generateError('μ—λŸ¬ λ°œμƒ', 500);

πŸ‘‰πŸ» 이 ν•¨μˆ˜λŠ” neverλ₯Ό λ°˜ν™˜ν•˜λ©° λ°˜ν™˜ 값을 μƒμ„±ν•˜μ§€ μ•ŠκΈ°λ•Œλ¬Έμ— void ν•¨μˆ˜μ΄κΈ°λ„ ν•˜λ‹€.

profile
즐겁게 κ°œλ°œν•˜μž μ₯¬μ•Όν˜ΈπŸ‘»

0개의 λŒ“κΈ€