- ๋ ๋ฐด๋์บ์ ์ดํํฐ๋ธ ํ์ ์คํฌ๋ฆฝํธ ๋์์ ์์ดํ 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
์คํ๊ฒฐ๊ณผ : NaN
noimplicitAny :true
์ปดํ์ผ ์ค๋ฅ๋ฅผ ๋ฏธ๋ฆฌ 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
strictNullChecks :true
undefined ๋ํ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ ๋๋ค.
strictNullChecks :true
์ค์ ์ผ๋ก ๊ฐ๋ฐํ๊ธฐ๋ก ์ ํํ์์๋ ๋ถ๊ตฌํ๊ณ null์ ํ์ฉํด์ผ ํ ์ผ์ด ์๋ค๋ฉด, ๋ช
์์ ์ผ๋ก nullํ์
์ ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
const x: number | null = null
null์ ์ ๋๋ก ํ์ฉํ์ง ์์ ๊ฒฝ์ฐ, null/undefined๋ฅผ ์ฒดํฌํ๋ ์ฝ๋๋ ๋จ์ธ๋ฌธ(assertion) ์ ์ถ๊ฐํฉ๋๋ค.
์์ )
const el = document.getElementById('status')
el.textContent = 'Ready'
ํ์
์คํฌ๋ฆฝํธ๊ฐ ์ถ๋ก ํ el
์ ํ์
์,
- status๋ผ๋ id๋ฅผ ๊ฐ์ง ์๋ฆฌ๋จผํธ๊ฐ ์์ผ๋ฉด
null
, - status๋ผ๋ id๋ฅผ ๊ฐ์ง ์๋ฆฌ๋จผํธ๊ฐ ์๋ค๋ฉด
HTMLElement
.
์ ๋๋ค.
ํ์ ์ด null์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์, ํ์ ์ถ๋ก ์์ ์๋ฌ๋ฅผ ๋ด์ค๋๋ค.
ํด๊ฒฐ ์ ๊ทผ ๋ฐฉ์:
- null ํ์ ์ ์ฒดํฌํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
if (el) {
el.textContent = 'Ready' // โ
}
- Non-null assertion ์ฌ์ฉ์ผ๋ก el์ ํ์คํ null ๋๋ undefined ๊ฐ ์๋์ ๊ฐ์ ํฉ๋๋ค.
el.!textContent = 'Ready'; //โ
.!
์ ๋ํด ๊ถ๊ธํ์๋ค๋ฉด,
Non-null assersion operator ๋์
TypeScript 2.9 ๊ณต์๋ฌธ์ ๊ณผ
Non-null Assertion Operator (Postfix!) ๊ฐ์ ์ TypeScript 3.9 ๊ณต์๋ฌธ์ ์ฐธ๊ณ ๋งํฌ ์
๋๋ค.
strictNullChecks
์ undefined๋ ๊ฐ์ฒด๊ฐ ์๋๋๋ค
๋ผ๋ ๋ฐํ์์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
strict:true
๋ผ๋ ์ค์ ์ ํ๊ฒ๋๋ฉด noImplicitAny์ strictNullChecks ์ค์ ์ ๋์ฒด ํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ์๋ฃ