[TS] Type System

๋‹ˆ๋‚˜๋…ธ๊ฐœ๋ฐœ์ƒํ™œยท2021๋…„ 9์›” 28์ผ
0

๐Ÿ’กah-ha

๋ชฉ๋ก ๋ณด๊ธฐ
36/51
post-thumbnail

Type System

  • ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ํƒ€์ž…์„ ์ถ”๋ก ํ•œ๋‹ค.

Type

  • ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์„ ๊ฒฐ์ •ํ•œ๋‹ค.

JS

function f1(a) {
  return a * 38;
}
// ์ž‘์„ฑ์ž๋Š” ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ€ number ํƒ€์ž…์ด๋ผ๋Š” ๊ฐ€์ •์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ–ˆ์œผ๋‚˜ 
// ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉ๋ฒ•์„ ์ˆ™์ง€ํ•˜์ง€ ์•Š์€ ์ฑ„, ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜๋ฉด NaN์ด ๋ฐœ์ƒํ•œ๋‹ค.
console.log(f1(10)) // 380
console.log(f1('mark')) // NaN

TS

// ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ a์˜ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— a๋Š” any๋กœ ์ถ”๋ก ๋œ๋‹ค.
function f2(a) {
  return a * 38;
}
// ๋‹ค๋งŒ, NaN๋„ number์˜ ์ผ์ข…์œผ๋กœ NaN์ด ๋‚˜์˜จ๋‹ค.
// ํ•˜์ง€๋งŒ ์ด๊ฒƒ ์—ญ์‹œ ์ž‘์„ฑ์ž๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •์ƒ์ ์œผ๋กœ ์˜๋„๋ฅผ ์ „๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.
console.log(f2(10)) // 380
console.log(f2('mark') + 5) // NaN

noImplicitAny

  • ์œ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด noImplicitAny๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฉ์–ดํ•˜๋ฉด any๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์„ ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
// error : Parameter 'a' implicitly has an 'any' type.
function f3(a) {
  return a * 38;
}

// ์‚ฌ์šฉ์ž์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ์ด ์ •์ƒ์ ์œผ๋กœ ๋งˆ๋ฌด๋ฆฌ ๋  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
console.log(f3(10))
console.log(f3('mark') + 5) 

strictNullChecks

  • ๋ชจ๋“  ํƒ€์ž…์— ์ž๋™์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๋Š” 'null'๊ณผ 'undefined'๋ฅผ ์ œ๊ฑฐํ•ด์ค€๋‹ค.
// ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์€ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ํƒ€์ž…์€ number | undefined๋กœ ์ถ”๋ก ๋œ๋‹ค.
function f4(a:number) {
  if( a > 0 ) {
    return a * 38;
  }
}

noImplicitReturns

  • ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
function f4(a:number) {
  if( a > 0 ) {
    return a * 38;
  }
  // ์กฐ๊ฑด๋ฌธ์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ์กฐ๊ฑด์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ถ€๋ถ„๊นŒ์ง€ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
}

strictFunctionTypes

  • ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•  ์‹œ์— ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์ด ๊ฐ™๊ฑฐ๋‚˜ ์Šˆํผํƒ€์ž…์ธ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

TS > Structural Type System

  • ๊ตฌ์กฐ๊ฐ€ ๊ฐ™์œผ๋ฉด, ๊ฐ™์€ ํƒ€์ž…์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๋ฐฉ์‹
interface IPerson {
  name: string;
  age: number;
}

type PersonType = {
  name: string;
  age: number;
}

let personInterface: Iperson = {} as any;
let personType: PersonType = {} as any;

personInterface = personType;
  • ํƒ€์ž…์ด ํƒ€์ž…์œผ๋กœ์จ์˜ ๋ชฉ์ ์ด๋‚˜ ์กด์žฌ ๊ฐ€์น˜๊ฐ€ ๋ช…ํ™•ํ•œ ๊ฒฝ์šฐ : Interface
  • ์–ด๋– ํ•œ ๋Œ€์ƒ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ชฉ์  : Type Alias
profile
๊นƒํ—™์œผ๋กœ ์ด์‚ฌ์ค‘..

0๊ฐœ์˜ ๋Œ“๊ธ€