Typescript Basics & Basic Types

TeasanΒ·2022λ…„ 9μ›” 4일
0

typescript

λͺ©λ‘ 보기
10/13
post-thumbnail

λͺ©μ°¨

  • ν•¨μˆ˜ λ°˜ν™˜ νƒ€μž… 및 void
  • νƒ€μž…μ˜ κΈ°λŠ₯을 ν•˜λŠ” ν•¨μˆ˜
  • ν•¨μˆ˜ νƒ€μž… 및 콜백
  • unknown νƒ€μž…
  • never νƒ€μž…

✧ ν•¨μˆ˜ λ°˜ν™˜ νƒ€μž… 및 void

  • voidλŠ” ν•¨μˆ˜κ°€ κ·Έ μ–΄λ–€ 것도 return ν•˜μ§€ μ•Šμ„ λ•Œ λ°˜ν™˜ νƒ€μž…μœΌλ‘œ μ§€μ •λœλ‹€.
function add(n1: number, n2: number) {
  // return의 νƒ€μž…μ€ λͺ…μ‹œμ μœΌλ‘œ μž‘μ„±λ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— number νƒ€μž…μœΌλ‘œ μΆ”λ‘ λ˜μ–΄ μ§€μ •λœλ‹€.
  return n1 + n2;
}

function printResult(num: number): void {
  // printResult ν•¨μˆ˜λŠ” μ½˜μ†”μ— 좜λ ₯ν•  뿐이지 κ·Έ μ–΄λ–€ 것도 return ν•˜κ³  μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— void νƒ€μž…μœΌλ‘œ μΆ”λ‘ λ˜μ–΄ μ§€μ •λœλ‹€.
  console.log("Result" + num);
}

printResult(add(5, 12)); // 17

✧ νƒ€μž…μ˜ κΈ°λŠ₯을 ν•˜λŠ” ν•¨μˆ˜

function add(n1: number, n2: number) {
  return n1 + n2;
}

function printResult(num: number): void {
  console.log("Result" + num);
}

printResult(add(5, 12)); // 17

let combineValues;
conbineValues = add;

console.log(combineValues(8, 8)); // 16
  • ν•˜μ§€λ§Œ typescript μž…μž₯μ—μ„œ λ³€μˆ˜ combineValuesλŠ” any νƒ€μž…μ΄ λœλ‹€.
function add(n1: number, n2: number) {
  return n1 + n2;
}

function printResult(num: number): void {
  console.log("Result" + num);
}

printResult(add(5, 12)); // 17

let combineValues;

conbineValues = add;
conbineValues = 22; // 컴파일 μ—λŸ¬κ°€ λ‚˜μ§€ μ•ŠμŒ; λŸ°νƒ€μž„ μ—λŸ¬κ°€ λ°œμƒ!

console.log(combineValues(8, 8)); // 16
  • κ·Έλž˜μ„œ combineValues에 숫자λ₯Ό 할당해도 νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μΈμ§€ν•˜μ§€ λͺ»ν•˜κ³ , 컴파일 μ—λŸ¬λ₯Ό 내지 μ•ŠλŠ”λ‹€. κ·ΈλŸ¬λ‚˜ λŸ°νƒ€μž„μ—μ„œλŠ” μ—λŸ¬κ°€ λ°œμƒν•œλ‹€! 숫자인 combineValuesλ₯Ό ν•¨μˆ˜λ‘œ μ‹€ν–‰ν•˜λ € ν•œ λͺ…ν™•ν•œ μ΄μœ κ°€ 있기 λ•Œλ¬Έμ΄λ‹€. 이런 μ—λŸ¬λ₯Ό λ°©μ§€ν•˜λ €λ©΄ combineValuesκ°€ ν•¨μˆ˜λ₯Ό μ§€λ‹ˆκ²Œ λœλ‹€κ³  'λͺ…μ‹œ' ν•˜λ©΄ λœλ‹€.
function add(n1: number, n2: number) {
  return n1 + n2;
}

function printResult(num: number): void {
  console.log("Result" + num);
}

printResult(add(5, 12)); // 17

let combineValues: Function;

conbineValues = add;
// conbineValues = 22; // 컴파일 μ—λŸ¬κ°€ λ°œμƒ!
conbineValues = printResult; // λ¬Έμ œκ°€ μžˆμŒμ—λ„ 컴파일 μ—λŸ¬κ°€ λ°œμƒλ˜μ§€ μ•ŠμŒ!

console.log(combineValues(8, 8)); // 16
  • ν•˜μ§€λ§Œ, combineValues에 ν•΄λ‹Ήλ˜μ§€ μ•ŠλŠ” printResult ν•¨μˆ˜λ₯Ό 할당해도 컴파일 μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 단점이 μžˆλ‹€. 이 λ•Œλ¬Έμ— ν•¨μˆ˜λ§Œ νƒ€μž…μœΌλ‘œ μ§€μ •ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, μ„ΈλΆ€μ μœΌλ‘œ 지정해쀄 수 μžˆλ‹€λ©΄ 더 쒋을 것이닀.
let combineValues: () => ;
  • Function νƒ€μž…μ„ μ§€μš°κ³  ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜ 값에 κ΄€λ ¨λœ ν•¨μˆ˜λ₯Ό μ„€λͺ…ν•˜λŠ” ν•¨μˆ˜λ‘œ μ‚¬μš©ν•  수 μžˆλ„λ‘ arrow function의 ν˜•νƒœλ‘œ ν‘œκΈ°ν•œλ‹€.
let combineValues: () => number;
  • 그리고 ν˜Έμ‚΄ν‘œμ˜ 였λ₯Έμͺ½μ— μ›ν•˜λŠ” ν•¨μˆ˜μ˜ λ°˜ν™˜ νƒ€μž… numberλ₯Ό μ§€μ •ν•˜μ—¬ μ €μž₯ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€.
let combineValues: (a: number, b: number) => number;
  • 그리고 λ§€κ°œλ³€μˆ˜λ₯Ό μ·¨ν•˜μ§€ μ•ŠλŠ” any νƒ€μž…μ„ κ±°λΆ€ν•˜κΈ° μœ„ν•΄μ„œ ν•΄λ‹Ή νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜μ²˜λŸΌ λ§€κ°œλ³€μˆ˜ 각각의 νƒ€μž…μ„ μ§€μ •ν•˜κ³  numberλ₯Ό λ°˜ν™˜ν•˜λ„λ‘ μž‘μ„±ν•œλ‹€.
function add(n1: number, n2: number) {
  return n1 + n2;
}

function printResult(num: number): void {
  console.log("Result" + num);
}

printResult(add(5, 12)); // 17

let combineValues: (a: number, b: number) => number;

conbineValues = add;
// conbineValues = printResult; // 컴파일 μ—λŸ¬κ°€ λ°œμƒ!

console.log(combineValues(8, 8)); // 16

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

function addAndHandle(n1: number, n2: number, cb: (num: number) => void) {
  const result = n1 + n2;
  cb(result);
}

addAndHandle(10, 20, (result) => {
  console.log(result);
});
  • ν•¨μˆ˜ 내에 callback ν•¨μˆ˜λ₯Ό μ „λ‹¬ν•˜λ©΄ νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” ν•΄λ‹Ή κ²°κ³Όκ°€ numberκ°€ 될 것이라고 μΆ”λ‘ ν•  수 있기 λ•Œλ¬Έμ— addAndHandle ν•¨μˆ˜κ°€ λ°›λŠ” λ§€κ°œλ³€μˆ˜μΈ result둜 μ–΄λ–€ μž‘μ—…μ΄λ“  ν•  수 μžˆλ‹€.
addAndHandle(10, 20, (result) => {
  console.log(result);
});
  • result λ§€κ°œλ³€μˆ˜μ— number νƒ€μž…μ΄λΌκ³  λͺ…μ‹œν•˜μ§€ μ•Šκ³ λ„ number둜 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” μ΄μœ λŠ” numberλΌλŠ” 인수 ν•˜λ‚˜λ₯Ό callbackμ—μ„œ κ°€μ Έμ˜¨λ‹€κ³  μš°λ¦¬κ°€ λͺ…μ‹œν•˜μ˜€κΈ° λ•Œλ¬Έμ—
function addAndHandle(n1: number, n2: number, cb: (num: number) => void) {
  const result = n1 + n2;
  cb(result);
}
  • cb: (num: number) => void 이λ₯Ό 보고 νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” result(num)κ°€ numberκ°€ 될 κ²ƒμž„μ„ μΆ”λ‘ ν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€. λ§Œμ•½ addAndHandle ν•¨μˆ˜μ—μ„œ 무언가λ₯Ό return ν•˜κ²Œ λœλ‹€λ©΄ μ–΄λ–¨κΉŒ?
addAndHandle(10, 20, (result) => {
  console.log(result);
  return result;
});
  • return resultλ₯Ό μž…λ ₯ν•˜λ©΄ callback이 무언가λ₯Ό λ°˜ν™˜ν•˜κ²Œ λœλ‹€. 아무 것도 λ°˜ν™˜ν•˜λ©΄ μ•ˆλœλ‹€κ³  λͺ…μ‹œ(void)ν–ˆμŒμ—λ„ 말이닀. κ·ΈλŸ¬λ‚˜ μ΄λŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ μ‹€μˆ˜λ‚˜ 버그가 μ•„λ‹ˆλ‹€. 기본적으둜 callback νƒ€μž…μ— voidλ₯Ό μ§€μ •ν•˜λ©΄μ—¬κΈ°μ„œ λ°˜ν™˜ν•  수 μžˆλŠ” λͺ¨λ“  값을 λ¬΄μ‹œν•˜κ²Œ 되기 λ•Œλ¬Έμ΄λ‹€.
function addAndHandle(n1: number, n2: number, cb: (num: number) => void) {
  const result = n1 + n2;
  cb(result);
}
  • κ·Έλž˜μ„œ addAndHandle ν•¨μˆ˜μ—μ„œ λ§€κ°œλ³€μˆ˜λ‘œ λ°›λŠ” μ½œλ°±ν•¨μˆ˜κ°€ return νƒ€μž…μœΌλ‘œ voidλ₯Ό μ„€μ •ν•¨μœΌλ‘œμ¨ 아무 μž‘μ—…λ„ μˆ˜ν–‰ν•˜μ§€ μ•Šμ„ 것이라고 μž…λ ₯ν•œ 것이닀.
addAndHandle(10, 20, (result) => {
  console.log(result);
  return result;
});
  • λ”°λΌμ„œ, addAndHandleμ—μ„œ 아무 문제 없이 무언가λ₯Ό λ°˜ν™˜ν•  수 μžˆλŠ”λ° κ·Έ μ΄μœ λŠ” μ•žμ„œ μ„€λͺ…ν•œ κ²ƒμ²˜λŸΌ addAndHandle κ°€ λ°›λŠ” λ§€κ°œλ³€μˆ˜μΈ callback ν•¨μˆ˜κ°€ λ°˜ν™˜λ˜λŠ” κ°’μ˜ νƒ€μž…μœΌλ‘œ voidλ₯Ό λͺ…ν™•ν•˜κ²Œ μ§€μ •ν•˜κ³  있기 λ•Œλ¬Έμ΄λ‹€.
cb: (num: number) => void
  • 그렇기에 addAndHandle ν•¨μˆ˜λŠ” 값을 λ°˜ν™˜ν•˜λŠ” μ–΄λ–€ μž‘μ—…λ„ μˆ˜ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€.
addAndHandle(10, 20, (result) => {
  console.log(result);
});

✧ unknown νƒ€μž…

  • unknown νƒ€μž…μ€ μ–΄λ–€ νƒ€μž…μ΄λ“  μ €μž₯이 κ°€λŠ₯ν•˜μ§€λ§Œ any νƒ€μž…κ³Ό λ‹€λ₯΄κ²Œ μž‘λ™ν•œλ‹€.

✧ unknown νƒ€μž…μΌ λ•Œ

let userInput: unknown; // μ–΄λ–€ νƒ€μž…μ΄λ“  μ €μž₯이 κ°€λŠ₯ν•˜λ‹€.
let userName: string;

userInput = 5;
userInput = "Max";

userName = userInput; // 컴파일 error λ°œμƒ!!!

✧ any νƒ€μž…μΌ λ•Œ

let userInput: any; // μ–΄λ–€ νƒ€μž…μ΄λ“  μ €μž₯이 κ°€λŠ₯ν•˜λ‹€.
let userName: string;

userInput = 5;
userInput = "Max";

userName = userInput; // 정상 μž‘λ™ λœλ‹€
  • anyλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œ μ•„μ£Ό μœ μ—°ν•œ νƒ€μž…μ΄κ³ , 덕뢄에 νƒ€μž… 확인을 μˆ˜ν–‰ν•˜μ§€ μ•Šλ„λ‘ ν•˜κΈ° λ•Œλ¬Έμ— 컴파일 μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€. 반면 unknown νƒ€μž…μ€ any 보닀 쑰금 더 μ œν•œμ μ΄λΌλŠ” νŠΉμ§•μ„ κ°–λŠ”λ‹€.
let userInput: unknown; // μ–΄λ–€ νƒ€μž…μ΄λ“  μ €μž₯이 κ°€λŠ₯ν•˜λ‹€.
let userName: string;

userInput = 5;
userInput = "Max";

userName = userInput; // 컴파일 error λ°œμƒ!!!
  • unknown을 μ‚¬μš©ν•˜λŠ” 경우, userInput에 ν˜„μž¬ μ €μž₯된 νƒ€μž…μ„ 확인해야 λ¬Έμžμ—΄μ„ μ›ν•˜λŠ” λ³€μˆ˜ userName에 ν• λ‹Ήν•  수 μžˆλ‹€.
let userInput: unknown; // μ–΄λ–€ νƒ€μž…μ΄λ“  μ €μž₯이 κ°€λŠ₯ν•˜λ‹€.
let userName: string;

userInput = 5;
userInput = "Max";

if (typeof userInput === "string") {
}
  • λ”°λΌμ„œ λ¬Έμžμ—΄μ΄ ν•„μš”ν•˜λ©΄ if 문을 λ§Œλ“€μ–΄μ„œ typeof userInput을 μž…λ ₯ν•˜κ³  λ¬Έμžμ—΄κ³Ό 같은지 μΆ”κ°€μ μœΌλ‘œ 확인을 ν•΄μ€€λ‹€. 그러면 νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” 이 확인 μž‘μ—…μ„ κ°μ§€ν•˜κ³ , 이 라인에 userName을 μ €μž₯ν–ˆλ‹€λŠ” κ±Έ μ΄ν•΄ν•˜κ²Œ λœλ‹€.
let userInput: unknown; // μ–΄λ–€ νƒ€μž…μ΄λ“  μ €μž₯이 κ°€λŠ₯ν•˜λ‹€.
let userName: string;

userInput = 5;
userInput = "Max";

if (typeof userInput === "string") {
  userName = userInput;
}
  • if λ¬Έμ—μ„œ userInput이 λ¬Έμžμ—΄ νƒ€μž…μ΄λΌκ³  μ„€μ •ν–ˆκΈ° λŒ€λ¬Έμ— userInput은 λ¬Έμžμ—΄ νƒ€μž…μ΄ 되고, κ·Έλ ‡κΈ° λ•Œλ¬Έμ— userName이 문제 없이 ν• λ‹Ήλ˜λŠ” 것이닀. λ”°λΌμ„œ 좔가적인 νƒ€μž… 검사가 ν•„μš”ν•˜λ‹€. unknown νƒ€μž…μ€ unknown을 μ‚¬μš©ν•΄μ„œ unknown 값을 κ³ μ •λœ 값에 ν• λ‹Ήν•  수 μžˆμœΌλ―€λ‘œ, unknown이 λͺ¨λ“  νƒ€μž… 확인을 λ¬΄μ‹œν•˜λŠ”anyνƒ€μž… 보닀 훨씬 λ‚«λ‹€. μ–΄λ–€ νƒ€μž…μ„ μ €μž₯할지 아직 μ•Œ 수 μ—†μ§€λ§Œ, 좔가적인 검사λ₯Ό μΆ”κ°€ν•˜μ—¬ μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ν• μ§€ λͺ…μ‹œν•¨μœΌλ‘œμ¨ λ¬Έμžμ—΄λ‘œ μž‘μ—…μ„ ν•˜λ €λŠ” 경우 λ¬Έμžμ—΄μ„ μ €μž₯ν•  수 μžˆλ‹€. unknown νƒ€μž…μ€ 맀번 μ‚¬μš©ν• λ§Œν•œ νƒ€μž…μ΄λΌ λ§ν•˜κΈ΄ κ³€λž€ν•˜μ§€λ§Œ, μ•žμ„œ λ§ν•œ 이런 κ²½μš°μ— 따라 any νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” λŒ€μ‹  μ„ νƒν•˜λŠ” 게 훨씬 더 λ‚˜μ„ μˆ˜λ„ μžˆλ‹€.

✧ never νƒ€μž…

  • never νƒ€μž…μ€ ν•¨μˆ˜κ°€ λ°˜ν™˜ν•  수 μžˆλŠ” νƒ€μž…μ΄λ‹€.
function generateError(message: string, code: number) {
  throw ;
}
  • λ¨Όμ € generateError ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ—λŸ¬κ°€ λ„˜μ–΄κ°€λ„λ‘(throw) ν•  것이닀. throwλŠ” μ—λŸ¬ 객체λ₯Ό μƒμ„±ν•˜μ—¬ λ„˜κΈ°λŠ” μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ 객체λ₯Ό λ„˜κΈΈ 수 μžˆλ‹€.
function generateError(message: string, code: number) {
  throw {};
}
  • 즉, κ°μ²΄λ‚˜ 값을 μ—λŸ¬λ‘œμ„œ λ„˜κΈΈ μˆ˜κ°€ μžˆλŠ”λ°, 여기에 message λ§€κ°œλ³€μˆ˜ 인수 값을 μ €μž₯ν•˜λŠ” message 속성을 가져와야 ν•œλ‹€.
function generateError(message: string, code: number) {
  throw { message: message, errorCode: code };
}
  • errorCode 속성 μ—­μ‹œ μž…λ ₯ν•˜κ³ , λ§€κ°œλ³€μˆ˜ code λ₯Ό μ €μž₯ν•  수 μžˆλ„λ‘ ν•œλ‹€.
function generateError(message: string, code: number) {
  throw { message: message, errorCode: code };
}

generateError("An error occurred!", 500);
  • 이제 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬, 'μ—λŸ¬κ°€ λ°œμƒν–ˆλ‹€' λΌλŠ” 메세지λ₯Ό ν˜ΈμΆœν•˜κ³ , errorCode 500을 λ§€κ°œλ³€μˆ˜λ‘œ λ„˜κ²¨μ€€λ‹€.

image

  • 개발자 도ꡬ μ½˜μ†”μ„ 확인해보면, μš°λ¦¬κ°€ λ„˜κ²¨μ€€ μ—λŸ¬κ°€ 좜λ ₯λ˜λŠ” κ±Έ μ•Œ 수 μžˆλ‹€. 규λͺ¨κ°€ 큰 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” 이와 같은 μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€λŠ” μ•ŠλŠ” 것이 μΌλ°˜μ μ΄μ§€λŠ” μ•Šμ„ 것이닀. 그런 규λͺ¨κ°€ 큰 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— 직접 μ—¬λŸ¬κ°œμ˜ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€λŠ” κ²½μš°λŠ” μ—†κΈ° λ•Œλ¬Έμ΄λ‹€. μ•„λ¬΄νŠΌ, generateError ν•¨μˆ˜μ˜ ν₯미둜운 점은 void 처럼 voidλ₯Ό λ°˜ν™˜ν•˜λŠ” 게 μ•„λ‹ˆλΌλŠ” 것이닀. 그리고 μ‹€μ œλ‘œλ„ μ—λŸ¬λ₯Ό λ„μš°κ³  μžˆλ‹€. λ¬Όλ‘  void κ°€ λ°˜ν™˜λ˜λ„λ‘ λͺ…μ‹œν•  μˆ˜λ„ μžˆλ‹€. 아무 것도 λ°˜ν™˜ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€.
function generateError(message: string, code: number): void {
  throw { message: message, errorCode: code };
}
  • ν•˜μ§€λ§Œ generateError ν•¨μˆ˜λŠ” λ‹¨μˆœνžˆ void처럼 아무 것도 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” 것은 μ•„λ‹ˆλ‹€. 더 μ •ν™•ν•˜κ²Œ μ΄μ•ΌκΈ°ν•˜μžλ©΄ ν•΄λ‹Ή ν•¨μˆ˜λŠ” neverλ₯Ό λ°˜ν™˜ν•˜λ©° λ°˜ν™˜ 값을 μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€. λ°˜ν™˜ 값을 λ³΅μ›ν•˜λ €λ©΄ console.log(result)λ₯Ό μž…λ ₯ν•œ λ‹€μŒμ—
function generateError(message: string, code: number) {
  throw { message: message, errorCode: code };
}

const result = generateError("An error occurred!", 500);
console.log(result);
  • μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•˜κ³  μ‹€ν–‰ν•˜λ©΄ logκ°€ μ •μ˜λ˜μ§€ μ•ŠλŠ”λ‹€. λ„˜μ–΄κ°„(throw) μ—λŸ¬κ°€ μŠ€ν¬λ¦½νŠΈμ™€ μΆ©λŒν•˜κΈ°λ„ ν•˜λ―€λ‘œ μŠ€ν¬λ¦½νŠΈκ°€ μ·¨μ†Œλ˜κΈ° λ•Œλ¬Έμ΄λ‹€. 이 블둝을 감싸고 try catchλ₯Ό μž…λ ₯ν•˜μ—¬ 슀크립트λ₯Ό 계속 진행할 μˆ˜λ„ μžˆμ§€λ§Œ generateError ν•¨μˆ˜λŠ” 기본적으둜 μ ˆλŒ€λ‘œ(never) 값을 μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€. λ˜ν•œ try catchλ₯Ό μ‚¬μš©ν•˜λ©΄ ν•΄λ‹Ή ν•¨μˆ˜κ°€ 항상 μŠ€ν¬λ¦½νŠΈλ‚˜ 슀크립트의 일뢀와 μΆ©λŒν•˜κΈ° λ•Œλ¬Έμ— 아무것도 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ ν•΄λ‹Ή ν•¨μˆ˜μ˜ λ°˜ν™˜ νƒ€μž…μ€ void 뿐만 μ•„λ‹ˆλΌ, never도 κ°€λŠ₯ν•˜λ‹€.
function generateError(message: string, code: number): never {
  throw { message: message, errorCode: code };
}

generateError("An error occurred!", 500);

정리

  • ν₯미둜운 점은 ν•΄λ‹Ή ν•¨μˆ˜μ— neverλ₯Ό λͺ…μ‹œμ μœΌλ‘œ νƒ€μž…μ§€μ •μ„ ν•˜μ§€ μ•Šκ³  ν•΄λ‹Ή 뢀근에 마우슀 μ»€μ„œλ₯Ό 올리면 voidκ°€ μžλ™μœΌλ‘œ μΆ”λ‘ λœλ‹€λŠ” 것인데 μ΄λŠ” neverκ°€ μƒˆλ‘œμš΄ μœ ν˜•μ΄ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ΄λ‹€. κ·ΈλŸ¬λ‹ˆκΉŒ 였래 μ „λΆ€ν„° neverλŠ” μ‚¬μš©λ˜μ—ˆμ§€λ§Œ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ 초기 버전뢀터 μ‚¬μš©λ˜μ§„ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— 아직 반영이 λ˜μ§€ μ•ŠλŠ” κ²ƒμ΄λž€ λœ»μ΄λ‹€. κ·ΈλŸ¬λ‚˜ neverκ°€ 아무것도 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 ν™•μ‹€νžˆ ν•˜κΈ° μœ„ν•΄ neverλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ„€μ •ν•  수 μžˆλ‹€. 이런 μž‘μ—…μ„ μˆ˜ν–‰ν•¨μœΌλ‘œμ¨ μ½”λ“œ ν’ˆμ§ˆμ˜ κ΄€μ μ—μ„œ μ˜λ„λ₯Ό 더 λΆ„λͺ…νžˆ ν•  수 있으며, void의 λŒ€μ²΄ νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•˜κΈ°μ— μ μ ˆν•˜λ‹€. κ·ΈλŸ¬λ‹ˆκΉŒ never νƒ€μž…μ„ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λŠ” 아무것도 λ°˜ν™˜ν•˜μ§€ μ•ŠμœΌλ©°, 기본적으둜 μŠ€ν¬λ¦½νŠΈλ‚˜ 슀크립트의 일뢀λ₯Ό μΆ©λŒμ‹œν‚€κ±°λ‚˜ λ§κ°€νŠΈλ¦¬κΈ° μœ„ν•œ κ²ƒμž„μ„ μ½”λ“œλ₯Ό μ½λŠ” 개발자 μ—­μ‹œ λΉ λ₯΄κ²Œ μ΄ν•΄μ‹œν‚¬ 수 있게 λ˜λŠ” 것이닀.

✦ 좜처


🚨 ν•΄λ‹Ή ν¬μŠ€νŒ…μ€ Udemy의 Typescript :κΈ°μ΄ˆλΆ€ν„° μ‹€μ „ν˜• ν”„λ‘œμ νŠΈκΉŒμ§€ with React + NodeJS κ°•μ˜λ₯Ό 베이슀둜 ν•œ κΈ°λ‘μž…λ‹ˆλ‹€.
✍🏻 κ°•μ˜ git repo λ°”λ‘œκ°€κΈ°

profile
일단 곡뢀가 '적성'에 λ§žλŠ” 개발자. κ·Όμ„±μžˆμŠ΅λ‹ˆλ‹€.

0개의 λŒ“κΈ€