[TS] ํ์ ์คํฌ๋ฆฝํธ - ๋๋ํ ์ฐ์ฐ์
์๋ฐ์คํฌ๋ฆฝํธ์์ NOT ! ์ฐ์ฐ์๋ false๋ฅผ ์๋ฏธํ๋ค. ๋ฐ๋ฉด ํ์ ์คํฌ๋ฆฝํธ์์ ์ด ๋๋ํ ! ์ฐ์ฐ์๊ฐ ๋ณ์ ๋ค์ ์ฌ ์ ์๋ค. if๋ฌธ ๋ฑ์ ์ฌ์ฉํ์ง ์๊ณ ํญ์ ์ ํจํ ๊ฐ์ด ์๋ค๊ณ ๋จ์ธ ํ ๋ ์ฌ์ฉํ๋ค.
Non-null assertion operator (๋๋ํ)
๐ก ESLint ๊ท์น์์ ๋๋ํ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด null-checking mode์ ํํ์ ๋ฐ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๊ถ์ฅํ์ง ์๋๋ค. ๋์ foo.bar && foo.bar...
AND ์ฐ์ฐ์ ํน์ ์ต์
๋ ์ฒด์ด๋ ์ฌ์ฉ์ ๊ถ์ฅํ๋ค. ๋๋ํ ์ฐ์ฐ์๋ฅผ ๊ผญ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ํญ์ ์ ํจํ ๊ฐ์ ๋ณด์ฅํ๋ ๋ณ์์๋ง ์ฌ์ฉํ๋ค.
๋ณ์ ๋ด๋ถ ๊ฐ์ ์ ๊ทผํ ๋ TS ์ปดํ์ผ๋ฌ๋ ํญ์ null
undefined
์ธ์ง ์ฒดํฌํ๋ค. ์ด๋ if
๋ฌธ์ผ๋ก ํ์
๋จ์ธ์(๋ณ์์ ์ํ๋ ํ์
์ ๊ฐ์ ๋ก ๋ถ์ฌ)์ ํ ์ ์๋ค.
๋งค๋ฒ if
๋ฌธ ์ฐ๋๊ฒ ๊ท์ฐฎ์ ๋ !
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ผ ํด๋น ๊ฐ์ด null
์ด๋ undefined
๊ฐ ์๋๋ผ๊ณ ๋จ์ธํด์ค๋ค. ์ปดํ์ผ๋ฌ์๊ฒ ์ด ๊ฐ์ ์ ๋ null
ํน์ undefined
๊ฐ ๋ ์ ์์ผ๋ ์คํํ๋ผ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค.
์๋ ์ฝ๋์ ์ฝ์์ ์คํํ๋ฉด TS2531 ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. lastName
ํ์
์ string
ํน์ null
๋ก ์ค์ ํ๊ธฐ ๋๋ฌธ์ ํด๋น ๊ฐ์ด null
์ผ ์๋ ์์ด์ ๋์ค๋ ๊ฒฝ๊ณ ๋ค.
interface User {
firstName: string;
lastName: string | null;
}
const user1: User = {
firstName: 'Cobain',
lastName: 'Kurt',
};
console.log(user1.lastName.toUpperCase());
// ์๋ฌ! TS2531: Object is possibly 'null'.
์๋์ฒ๋ผ lastName
๋ค์ !
๋๋ํ๋ฅผ ๋ถ์ฌ์ ํญ์ ๊ฐ์ด ์กด์ฌํ๋ค๊ณ ๋จ์ธํ๋ฉด ์๋ฌ๊ฐ ๋์ค์ง ์๋๋ค.
console.log(user1.lastName!.toUpperCase()); // 'Kurt'
์ด์ ๋น์ทํ ์ต์
๋ ์ฒด์ด๋(๋ณ์๋ค์ ๋ฌผ์ํ ?
์ฐ์ฐ์ ์ฌ์ฉ)์ ํด๋น ๊ฐ์ด null
ํน์ undefined
๋ฉด ํ๊ฐ๋ฅผ ๋ฉ์ถ๊ณ undefined
๋ฅผ ๋ฐํํ๋ ์ ์ด ๋ค๋ฅด๋ค. ์๋์ฒ๋ผ ํ๊ฐํ๋ ๊ฐ์ด null
์ด๋ undefined
์ผ ์๋ ์์ ๋ ์๋ฌ๋ฅผ ํผํ๊ธฐ ์ํด ์ต์
๋ ์ฒด์ด๋์ ์ฌ์ฉํ๋ค.
const user1: ServiceUser = {
firstName: 'Cobain',
lastName: null,
};
console.log(user1.lastName!.toUpperCase()); // ์๋ฌ! Cannot read properties of null (reading 'toUpperCase')
console.log(user1.lastName?.toUpperCase()); // undefined
Definite assignment assertions
๋ณ์ ๋ค์ ๋๋ํ ์ฐ์ฐ์ !
๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ด ํ ๋น๋์ด ์์ง ์์ ๋ณ์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค. ์ปดํ์ผ๋ฌ์๊ฒ ํด๋น ๋ณ์์ ๊ฐ์ ํญ์ ํ ๋น๋์ด ์๋ค๊ณ (์์ง ๊ฐ์ ํ ๋นํ์ง ์์์ด๋) ์๋ ค์ฃผ๋ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์ด๋ฅผ Definite Assignment Assertions ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ ๊ฐ์ ํ ๋นํ์ง ์๊ณ ์ฌ์ฉํ๋ฉด ์๋์ฒ๋ผ TS2454 ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
let num: number;
console.log(num); // ์๋ฌ! TS2454: Variable 'num' is used before being assigned.
num
๋ณ์ ๋ค์ ๋๋ํ !
๋ฅผ ๋ถ์ด๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ์ปดํ์ผ๋ฌ์๊ฒ ๋ณ์ num
์ ํญ์ ๊ฐ์ด ํ ๋น๋์ด ์๋ค๊ณ ๋จ์ธ(assertion)ํ๊ธฐ ๋๋ฌธ์ด๋ค.
let num!: number;
console.log(num); // undefined
์๋์ฒ๋ผ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋ ๋๋ํ ์ฐ์ฐ์๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉํ ์๋ ์๋ค.
let num: number;
console.log(num!); // undefined
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[HTML/CSS] ์ด๋ฉ์ผ ํ ํ๋ฆฟ ์์ฑ๋ฒ (feat. ํ ์ด๋ธ ์ฝ๋ฉ)
[HTML/CSS] ์ด๋ฉ์ผ ํ ํ๋ฆฟ ์์ฑ๋ฒ (feat. ํ ์ด๋ธ ์ฝ๋ฉ)
2024.05.03 -
[React] ๋ฆฌ์กํธ ์ด๋ฏธ์ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ(์ ๋ก๋) ๊ตฌํ / File API
[React] ๋ฆฌ์กํธ ์ด๋ฏธ์ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ(์ ๋ก๋) ๊ตฌํ / File API
2024.05.02 -
[Algorithm] ์๋ฐ์คํฌ๋ฆฝํธ ์(pairs)์ ํฌํจํ๋ ๋ฐฐ์ด์์ ์ ๋ํฌ ๋๋ฒ ์ฐพ๊ธฐ
[Algorithm] ์๋ฐ์คํฌ๋ฆฝํธ ์(pairs)์ ํฌํจํ๋ ๋ฐฐ์ด์์ ์ ๋ํฌ ๋๋ฒ ์ฐพ๊ธฐ
2024.05.02 -
[Git] git revert, git reset ์ฐจ์ด์ ๋ฐ HEAD ๋ถ๋ฆฌ
[Git] git revert, git reset ์ฐจ์ด์ ๋ฐ HEAD ๋ถ๋ฆฌ
2024.05.01