ํ์ ์ ์งํฉ์ด๋ค
ํ์ ์คํฌ๋ฆฝํธ์ ํ์ ์ ์งํฉ์ผ๋ก ์ดํดํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ํ์ ์คํฌ๋ฆฝํธ์ number ํ์ ์ 1, -20, 0.123, Infinity ๋ฑ ์ฌ๋ฌ ๊ฐ์ ์ซ์ ํ์ ์ ๊ฐ์ ๋ฌถ์ ์งํฉ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋ฑ ํ๋์ ๊ฐ๋ง ํฌํจํ๋ Number Literal ํ์ ๋ ์งํฉ์ผ๋ก ์ดํดํด๋ณด๋ฉด ์ฝ๊ฒ ์ค๋ช ๊ฐ๋ฅํ๋ค. ์๋ฅผ ๋ค์ด 20์ด๋ผ๋ Number Literal ํ์ ์ด ์๋ค๋ฉด ๊ทธ๊ฒ์ 20๋ง์ ์์๋ก ๊ฐ๋ ์งํฉ์ธ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด Number ํ์ ๊ณผ Number Literal ํ์ ์ฌ์ด์ ๊ด๊ณ๋ ์ด๋ป๊ฒ ํํํ ์ ์์๊น? ์ด ๋ํ ์งํฉ์ ํฌํจ ๊ด๊ณ๋ก ์ค๋ช ์ด ๊ฐ๋ฅํ๋ค. Number ํ์ ์ Number Literal ํ์ ์ ํฌํจํ๋ ์งํฉ์ด๊ณ , Number Literal ํ์ ์ Number ํ์ ์ ๋ถ๋ถ ์งํฉ์ผ๋ก ์ค๋ช ํ ์ ์๋ค. ์ด ๋, ๋ค๋ฅธ ํ์ ์ ํฌํจํ๊ณ ์๋ ํ์ ์ ์ํผ ํ์ (๋ถ๋ชจ ํ์ )์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ , ๋ค๋ฅธ ํ์ ์ ํฌํจ๋๋ ํ์ ์ ์๋ธ ํ์ (์์ ํ์ )์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ฌ๊ธฐ๊น์ง ์ดํดํ๊ณ ํ์ ๊ณ์ธต๋๋ฅผ ์ดํด๋ณด์.
์ด์ ํด๋น ๊ณ์ธต๋์์ ํ๋์ ํ์ ์ ์งํฉ์ผ๋ก ๋ณผ ์ ์๊ณ , ๊ฐ ํ์ ์ ์์ ์๋ ๊ฒ์ด ์ํผ ํ์ (๋ถ๋ชจ ํ์ )์ด๊ณ , ์๋์ ์๋ ๊ฒ์ด ์๋ธ ํ์ (์์ ํ์ )์์ ์ ์ ์๋ค.
ํ์ ํธํ์ฑ
์ํผ ํ์ ๊ณผ ์๋ธ ํ์ ์ ์ดํดํ๋ฉด ํ์ ํธํ์ฑ์ ์ดํดํ ์ ์๋ค. ํ์ ํธํ์ฑ์ด๋ ์ด๋ ํ ํ์ ์ ๋ค๋ฅธ ํ์ ์ผ๋ก ์ทจ๊ธํด๋ ๊ด์ฐฎ์์ง ํ๋จํ๋ ๊ฒ์ด๋ค.
์์ ์ดํด๋ณธ Number ํ์ ๊ณผ Number Literal ํ์ ์ ๋ฐํ์ผ๋ก ์ดํด๋ณด์. Number ํ์ ์ ๋ณ์์ Number Literal ํ์ ์ ๊ฐ์ ํ ๋นํ๋ ๊ฒ์ ๊ฐ๋ฅํ๋ค. ์ฆ, Number Literal ํ์ ์ Number ํ์ ์ผ๋ก ์ทจ๊ธํด๋ ๊ด์ฐฎ๋ค. ํ์ง๋ง ๋ฐ๋๋ก Number Literal ํ์ ์ ๋ณ์์ Number ํ์ ์ ๊ฐ์ ํ ๋นํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค. ์ฆ, Number ํ์ ์ Number Literal ํ์ ์ผ๋ก ์ทจ๊ธํ ์๋ ์๋ค.
์ด์ฒ๋ผ ์๋ธ ํ์ ์ ๊ฐ์ ์ํผ ํ์ ์ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ ๊ฒ์ ์ ์บ์คํ ์ด๋ผ๊ณ ํ๊ณ , ์ํผ ํ์ ์ ๊ฐ์ ์๋ธ ํ์ ์ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ ๊ฒ์ ๋ค์ด ์บ์คํ ์ด๋ผ๊ณ ํ๋ค. ํ์ ์คํฌ๋ฆฝํธ์์๋ ์ ์บ์คํ ์ ๊ฐ๋ฅํ์ง๋ง, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ค์ด ์บ์คํ ์ ๋ถ๊ฐ๋ฅํ๋ค.
ํ์ ๊ณ์ธต๋์ ํจ๊ป ๊ธฐ๋ณธํ์ ์ดํด๋ณด๊ธฐ
unknown ํ์
ํ์ ๊ณ์ธต๋์์ unknown ํ์ ์ ๊ฐ์ฅ ์ต์๋จ์ ์์นํ๊ณ ์๋ค. ์ฆ unknown ํ์ ์ ๋ชจ๋ ํ์ ์ ์ํผ ํ์ ์ด๋ฉฐ, ์ด๋ ๊ณง unknown ํ์ ์ด ์ ์ฒด์งํฉ์์ ์๋ฏธํ๋ค.
let a: unknown = 1;
let b: unknown = "hello";
let c: unknown = true;
let d: unknown = null;
let e: unknown = undefined;
unknown ํ์ ์ ๋ชจ๋ ํ์ ์ ์ํผ ํ์ ์ด๋ฏ๋ก ์ด๋ค ํ์ ์ ๊ฐ์ด๋ ์ง unknown ํ์ ์ ๊ฐ์ผ๋ก ์ทจ๊ธํ ์ ์๋ค. ์ฆ ๋ชจ๋ ํ์ ์ unknown ํ์ ์ผ๋ก ์ ์บ์คํ ์ด ๊ฐ๋ฅํ๋ค.
let unknownVar: unknown;
let num: number = unknownVar; // โ
let str: string = unknownVar; // โ
let bool: boolean = unknownVar; // โ
๋ฐ๋๋ก unknown ํ์ ์ ๊ฐ์ ์ด๋ค ํ์ ์ ๊ฐ์ผ๋ก๋ ์ทจ๊ธ๋ ์ ์๋ค. ์ฆ unknown ํ์ ์ ์ด๋ค ํ์ ์ผ๋ก๋ ๋ค์ด์บ์คํ ์ด ๋ถ๊ฐ๋ฅํ๋ค.
never ํ์
ํ์ ๊ณ์ธต๋์์ never ํ์ ์ ๊ฐ์ฅ ์ตํ๋จ์ ์์นํ๊ณ ์๋ค. ์ฆ never ํ์ ์ ๋ชจ๋ ํ์ ์ ์๋ธ ํ์ ์ด๋ฉฐ, ์ด๋ ๊ณง never ํ์ ์ด ๊ณต์งํฉ์์ ์๋ฏธํ๋ค.
function neverFunc(): never {
while (true) {}
}
let num: number = neverFunc();
let str: string = neverFunc();
let bool: boolean = neverFunc();
never ํ์ ์ ๋ชจ๋ ํ์ ์ ์๋ธ ํ์ ์ด๋ฏ๋ก ์ด๋ค ํ์ ์ ๋ณ์์๋ never ํ์ ์ ๊ฐ์ ์ ์ฅํ ์ ์๋ค. ์ฆ, never ํ์ ์ ์ด๋ค ํ์ ์ผ๋ก๋ ์ ์บ์คํ ์ด ๊ฐ๋ฅํ๋ค.
let never1: never = 10; // โ
let never2: never = "string"; // โ
let never3: never = true; // โ
๋ฐ๋๋ก never ํ์ ์ ๋ณ์์๋ ์ด๋ค ํ์ ์ ๊ฐ๋ ์ ์ฅํ ์ ์๋ค. ์ฆ, ์ด๋ค ํ์ ๋ never ํ์ ์ผ๋ก ๋ค์ด์บ์คํ ์ด ๋ถ๊ฐ๋ฅํ๋ค.
void ํ์
void ํ์ ์ ํ์ ๊ณ์ธต๋์ ์ค๊ฐ ์ฏค์ ์์นํ์ฌ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋ ํจ์์ ๋ฐํ๊ฐ ํ์ ์ผ๋ก ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
ํ์ ๊ณ์ธต๋๋ฅผ ์ดํด๋ณด๋ฉด void ํ์ ์ undefined ํ์ ์ ์ํผ ํ์ ์์ ์ ์ ์๋ค. ๋ฐ๋ผ์ undefined ํ์ ์ ๊ฐ์ void ํ์ ์ผ๋ก ๊ฐ์ฃผํ ์ ์๊ณ (์ ์บ์คํ ๊ฐ๋ฅ), void ํ์ ์ ๋ฐํ๊ฐ์ ๊ฐ์ง๋ ํจ์์์ undefined๋ฅผ ๋ฐํํ ์ ์๋ค.
function voidFunc(): void {
console.log("hi");
return undefined; // ๊ฐ๋ฅ
}
๋ํ void ํ์ ์ ์๋ธ ํ์ ์ undefined ํ์ ๊ณผ never ํ์ ๋ฐ์ ์กด์ฌํ์ง ์๋๋ค. ๋ฐ๋ผ์ void ํ์ ์ ๋ณ์์๋ undefined ํ์ ๊ณผ never ํ์ ์ด์ธ์ ๋ค๋ฅธ ํ์ ์ ๊ฐ์ ํ ๋นํ ์ ์๋ค.
let voidVar: void;
voidVar = undefined;
let neverVar: never;
voidVar = neverVar;
any ํ์
any ํ์ ์ ํ์ ๊ณ์ธต๋๋ฅผ ๋ฌด์ํ๋ ์นํธํค ํ์ ์ผ๋ก ๋ชจ๋ ํ์ ์ ์ํผ ํ์ ์ด ๋ ์ ์๊ณ , never๋ฅผ ์ ์ธํ ๋ชจ๋ ํ์ ์ ์๋ธ ํ์ ์ด ๋ ์ ์๋ค.
any ํ์ ์ ๋ชจ๋ ํ์ ์ ์ํผ ํ์ ์ด ๋ ์ ์๋ค๊ณ ํ์ผ๋ฏ๋ก, unknown์ ์ํผ ํ์ ์ด ๋๋ ๊ฒ ๋ํ ๊ฐ๋ฅํ๋ค. ์ฆ, unknown ํ์ ์ ๊ฐ์ any ํ์ ๋ณ์์ ํ ๋นํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ any ํ์ ์ ํํด unknown ํ์ ์ ๋ค์ด์บ์คํ ํ ์ ์๋ค.
let unknownVar: unknown;
let anyVar: any;
let undefinedVar: undefined;
anyVar = unknownVar; // ๋ค์ด์บ์คํ
any ํ์ ์ ์์ ์ด ๋ค๋ฅธ ํ์ ์ผ๋ก ๋ค์ด์บ์คํ ๋๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์์ธ์ ์ผ๋ก never ํ์ ์ any ํ์ ์ ๋ค์ด์บ์คํ ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
let anyVar: any;
let undefinedVar: undefined;
let neverVar: never;
undefinedVar = anyVar; // ๋ค์ด์บ์คํ
neverVar = anyVar; // โ ๋ถ๊ฐ๋ฅ
์ฐธ๊ณ
๋ณธ ํฌ์คํธ๋ ์ด์ ํ๋์ 'ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ ํ์ ์คํฌ๋ฆฝํธ(TypeScript)' ๊ฐ์๋ฅผ ์๊ฐํ๋ฉฐ ์์ฑํ์์ต๋๋ค.
ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ ํ์ ์คํฌ๋ฆฝํธ(TypeScript) ๊ฐ์ | ์ด์ ํ Winterlood - ์ธํ๋ฐ
์ด์ ํ Winterlood | , ํ๋ก ํธ์๋์ ํผํ ์ ์๋ ๋์ธ ํ์ ์คํฌ๋ฆฝํธ,์ด์ ๋ ์ ๋๋ก ์ ๋ณตํ ๋๊ฐ ์์ต๋๋ค! ๐ [์ฌ์ง]์ธํ์ฝ 2023 'ํ์ ์คํฌ๋ฆฝํธ๋ ์ ๊ทธ๋ด๊น?' ๋ฐํ์์ ๊ฐ์์ ๋๋ค. ๐ง ๋ฐฐ์
www.inflearn.com