Logo
Hyunsu Blog
effectiveTypescript_item2

๐Ÿ“†Published :Sep 9, 2021 โ€ข

๐Ÿ“†Updated :Sep 9, 2021 โ€ข

โ˜•๏ธ1min

์•„์ดํ…œ 2. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ • ์ดํ•ดํ•˜๊ธฐ

  • ๋Œ„ ๋ฐด๋”์บ„์˜ ์ดํŽ™ํ‹ฐ๋ธŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋„์„œ์˜ ์•„์ดํ…œ2.ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ • ์ดํ•ดํ•˜๊ธฐ ํŒŒํŠธ๋ฅผ ์ฝ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
function add(a, b) { return a + b } add(10, null)

์˜ค๋ฅ˜์—†์ด ํƒ€์ž… ์ฒด์ปค๋ฅผ ํ†ต๊ณผํ•  ์ˆ˜์žˆ์„๊นŒ ?

tsconfig์—์„œ ์„ค์ •์ด ์–ด๋–ป๊ฒŒ ๋˜์–ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค๋ฉด ๋Œ€๋‹ตํ•  ์ˆ˜ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์„ค์ •์€ ํ˜„์žฌ ๊ฑฐ์˜ 100๊ฐœ์— ์ด๋ฅด๋ฉฐ, ์„ค์ •์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋Š๊ปด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด noImplicitAny์™€ stricNullCheck์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

noImplicitAny

noImplicitAny๋Š” ๋ณ€์ˆ˜๋“ค์ด ๋ฏธ๋ฆฌ ์ •์˜๋œ ํƒ€์ž…์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

ํƒ€์ž…์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์•”๋ฌต์ ์œผ๋กœ any๋ผ๋Š” ํƒ€์ž…์„ ์ง€์ •ํ•˜๋Š”๋ฐ, ํƒ€์ž…์ฒด์ปค๋Š” ์†์ ˆ์—†์ด ๋ฌด๋ ฅํ•ด์ง„๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž…์ •๋ณด๋ฅผ ๊ฐ€์งˆ ๋•Œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋˜๋„๋ก์ด๋ฉด noImplicitAny๋ฅผ true๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

no + implicitAny โ‡’ ์„ค์ • : ์•”๋ฌต์ ์ธ any๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. true/ false

noimplicitAny :false

noImplicity_1

์‹คํ–‰๊ฒฐ๊ณผ : NaN

noimplicitAny :true

noImplicity_2

์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ๋ฏธ๋ฆฌ vscode์—์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ถ”๋ก ํ•œ ํ•จ์ˆ˜์˜ ํƒ€์ž…์œผ๋กœ ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ์—์„œ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰๊ฒฐ๊ณผ:

๋ช…์‹œ์ ์œผ๋กœ :any ๋ผ๊ณ  ์„ ์–ธํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋” ๋ถ„๋ช…ํ•œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ํƒ€์ž…์ฒด์ปค์˜ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function add(a: number, b: number) { return a + b } add(10, 2) // 12

์–ด๋Š ์ƒํ™ฉ์— ์„ค์ • ๋˜๋Š” ๋น„์„ค์ •์ด ์ข‹์„๊นŒ?

  • ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœ- ๊ฐ€๋…์„ฑ, ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ์ „ํ™˜ํ•˜๋Š” ์ƒํ™ฉ์—๋Š” ์„ค์ •ํ•ด์ œ

(์ฑ…์˜ ๋’ท๋ถ€๋ถ„์—์„œ any์˜ ์ง€์–‘์„ฑ์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š”๋ฐ, anyํƒ€์ž…์„ ์ง€์–‘ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ด€์ ์—์„œ๋Š” ์•„๋งˆ noImplicitAny๋ฅผ true ๋กœ ํ•˜๋Š”๊ฒŒ ์ข‹์€๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.)

strictNullChecks

null๊ณผ undefined ๊ฐ€ ๋ชจ๋“  ํƒ€์ž…์—์„œ ํ—ˆ์šฉํ•˜๋Š”๊ฐ€? ์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ ํ•˜๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค.

const x: number = null
  • strictNullChecks :false
structNullChecks_false
  • strictNullChecks :truestrictNullChecks_true

undefined ๋˜ํ•œ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ๋ƒ…๋‹ˆ๋‹ค.

strictNullChecks :true์„ค์ •์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ์„ ํƒํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  null์„ ํ—ˆ์šฉํ•ด์•ผ ํ•  ์ผ์ด ์žˆ๋‹ค๋ฉด, ๋ช…์‹œ์ ์œผ๋กœ nullํƒ€์ž…์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const x: number | null = null

null์„ ์ ˆ๋Œ€๋กœ ํ—ˆ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, null/undefined๋ฅผ ์ฒดํฌํ•˜๋Š” ์ฝ”๋“œ๋‚˜ ๋‹จ์–ธ๋ฌธ(assertion) ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ)

const el = document.getElementById('status') el.textContent = 'Ready' strictNullChecks_04

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ถ”๋ก ํ•œ el ์˜ ํƒ€์ž…์€,

  • status๋ผ๋Š” id๋ฅผ ๊ฐ€์ง„ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์—†์œผ๋ฉด null,
  • status๋ผ๋Š” id๋ฅผ ๊ฐ€์ง„ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด HTMLElement.
    ์ž…๋‹ˆ๋‹ค.

ํƒ€์ž…์ด null์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํƒ€์ž…์ถ”๋ก ์—์„œ ์—๋Ÿฌ๋ฅผ ๋‚ด์ค๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ์ ‘๊ทผ ๋ฐฉ์•ˆ:

  • null ํƒ€์ž…์„ ์ฒดํฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
if (el) { el.textContent = 'Ready' // โœ… } strictNullChecks_06
  • Non-null assertion ์‚ฌ์šฉ์œผ๋กœ el์€ ํ™•์‹คํžˆ null ๋˜๋Š” undefined ๊ฐ€ ์•„๋‹˜์„ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
el.!textContent = 'Ready'; //โœ… stricNullChecks_05

.! ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•˜์‹œ๋‹ค๋ฉด, Non-null assersion operator ๋„์ž… TypeScript 2.9 ๊ณต์‹๋ฌธ์„œ ๊ณผ Non-null Assertion Operator (Postfix!) ๊ฐœ์„ ์•ˆ TypeScript 3.9 ๊ณต์‹๋ฌธ์„œ ์ฐธ๊ณ  ๋งํฌ ์ž…๋‹ˆ๋‹ค.

strictNullChecks ์€ undefined๋Š” ๊ฐ์ฒด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค๋ผ๋Š” ๋Ÿฐํƒ€์ž„์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

strict:true๋ผ๋Š” ์„ค์ •์„ ํ•˜๊ฒŒ๋˜๋ฉด noImplicitAny์™€ strictNullChecks ์„ค์ •์„ ๋Œ€์ฒด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ฐธ๊ณ ์ž๋ฃŒ

Hi, I'm Hyunsu ๐Ÿ‘‹

Profile Image

์•ˆ๋…•ํ•˜์„ธ์š”. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ฃผํ˜„์ˆ˜์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ํ’๋ถ€ํ•˜๊ณ  ๊ฐ€์น˜ ์žˆ๋Š” ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ์ผ์— ๋ฟŒ๋“ฏํ•จ์„ ๋Š๋‚๋‹ˆ๋‹ค.

์˜ต์‹œ๋””์–ธ(Obsidian)์—์„œ ํ˜„์žฌ ๋ธ”๋กœ๊ทธ๋กœ ํ•˜๋‚˜์”ฉ ๊ธ€์„ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์— ์žˆ์–ด์š”. โ˜•๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป โ›ท

Github on ViewReach Me Out