[ts] void ,any, unknown, never ํ์
๐ void
type AppsettingContextType={
fontSize: FontSize;
theme: Theme;
setTheme:(theme:Theme) =>void;
setFontSize:(fontSize:FontSize)=>void
};
์ด๋ ๊ฒ ํ์ ์ ์ธ์์ void ํ์ ์ ๋ณธ์ ์ด ์์ ๊ฒ์ด๋ค.
void๋ typescript์์ ๋ฐํ ํ์ ์ด ์์์ ๋ช ์์ ์ผ๋ก ํํํ๋ ์ฉ๋์ ํ์ ์ด๋ค.
๋ณ์์ ํ์ ์ผ๋ก void๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ๋ณ์์๋ null ๋๋ undefined๋ง ํ ๋นํ ์ ์๋ค. ์ฆ, ํด๋น ๋ณ์์๋ ์ ํจํ ๊ฐ์ด ์์์ ๋ํ๋ธ๋ค.
๊ทธ๋์ ์ฃผ๋ก ๋คํธ์ํฌ ์์ฒญ,๋ก๊ทธ ์ถ๋ ฅ, ๊ฐ์ฒด ์ํ ๋ณ๊ฒฝ ๋ฑ๊ณผ ๊ฐ์ ์์ ์ ์์ฑํ๋ ๊ฒ์ด ๋ชฉ์ ์ธ ํจ์๋ฅผ ํธ์ถํ ํ์ ๋ฐํ๋ ๊ฐ์ ์ฌ์ฉํ ํ์๊ฐ ์์์ ๋ํ๋ธ๋ค!
- return ๊ฐ ํ์ ์ด void
function example(): void {
return '3';
}
์ด๋ด๋ return ๊ฐ์ 'string ํ์์ void์ ํ ๋นํ ์ ์์ต๋๋ค.' ๋ผ๋ ์ค๋ฅ๊ฐ ๋ฌ๋ค.
์ฆ ํจ์์ return๊ฐ ํ์ ์ด void์ด๋ผ๋ ๊ฒ์, return๊ฐ์ ๋ฃ์ผ๋ฉด ์ ๋๋ ๋ป!
ํ์ง๋ง undefined๋ ๋ฃ์ด๋ ๋์ง๋ง ์ฃผ๋ก ์๋ตํ๊ณ return;์ผ๋ก๋ง ์ ์ธํ๊ณค ํ๋ค.
์์ 1>
// ๋ฉ์๋๊ฐ void์ธ ๊ฒฝ์ฐ
interface exa {
eat: () => void;
}
const example:exa = {
eat() {return 2;}
}
const b = example.eat();
์ด๋ ๊ฒ b๋ฅผ ์ถ๋ ฅํ๋ฉด ๊ฐ์ด 2๊ฐ ๋์ฌ๊ฒ ๊ฐ์ง๋ง ๋ก!
์ ๋ต์ void๊ฐ ๋์จ๋ค.
๋ฉ์๋๊ฐ void์ธ ๊ฒฝ์ฐ์๋ return๊ฐ์ด ์๋ ๋ง๋ ์๊ด์์ด void๋ฅผ ๋ฐํํ๋ค.
๊ทธ๋์ ์ ์ด์ void๋ฉด ์์น์ ์ผ๋ก return ๊ฐ์ ์ ๋ฃ๋๊ฒ ์ข๋ค๊ณ ํ๋ค!!
์์ 2>
function sayHello(): void {
console.log("Hello!");
}
const result: void = sayHello(); // ์๋ฌ๋จ.
์ฆ void ํ์ ์ธ ๋ณ์์ ๊ฐ์ ์ง์ ํ๋ ค๊ณ ํ๋ฉด error๊ฐ ๋๋ค.
๐ any
์๋ฏธ ๊ทธ๋๋ก ๋ชจ๋ ํ์ ์ ํ ๋น๋ฐ์ ์ ์๋ ํ์ ์ด๋ค.
๊ทธ๋ผ ์ด๋ค ํ์ ์ด๋ ์๊ด์๋ ๊ฑฐ๋ค?๋ผ๊ณ ์๊ฐํ ์ ์์ง๋ง , '์ด๋ค ํ์ ์ด ๋ ์ง ๋ชจ๋ฅด๊ฒ ์ผ๋
๋๊ฐ ์์์ ์ถ๋ก ํด์ค' ๋ผ๋ ๋ป์ผ๋ก ์๊ฐํ๋ฉด ๋ ์ข๋ค.
ํ์ ์คํฌ๋ฆฝํธ์์ any๋ฅผ ์ฐ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์ฒ๋ผ ํ์ ์ด ๊ฒ์ฌ๋์ง ์๊ธฐ์ ์กฐ์ฌํด์ผ ํ๋ค.
const value : number = 20;
console.log(value.length); //์๋ฌ๋จ.
number ํ์ ์๋ length ์์ฑ์ด ์๊ธฐ์ ์๋ฌ๊ฐ ๋๋ค.
์ด๋ฅผ anyํ์ ์ผ๋ก ๋ณ๊ฒฝํด๋ณด์.
const value: any = 20;
console.log(value.length); //์๋ฌ๊ฐ ๋์ง์๊ณ undefined๊ฐ ๋ธ.
ํ์ง๋ง value๊ฐ์ type์ ๋ณด๋ฉด number๋ก ์ฐํ๋ค..
๋ฐ๋ผ์ any๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์๋ฌ๊ฐ ์๋๋ ์ฌ์ค์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ ๊ฒ!
๐ unKnown
any์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ํ์ ์ ํ ๋น ๋ฐ์ ์ ์๋ค.
ํ์ ์ ๊ฒ์ฌํด ๊ฐ๊ณตํ๊ธฐ ์ ๊น์ง๋ ํ์ ์คํฌ๋ฆฝํธ๊ฐ unknown ๊ฐ์ ์ฌ์ฉ ํ ์ ์๋ค.
any๋ ํ์ ๊ฒ์ฌ๋ฅผ ํ์ง ์๊ธฐ์ ํ์ ์คํฌ๋ฆฝํธ ์ฌ์ฉ์๋ฏธ๊ฐ ์๊ธฐ์ ๋น๊ต์ unknown์ ์ฐ๋ ๊ฒ์ด ์ข๋ค๊ณ ํ๋ค!
๋ํ ํ์ ์ฒดํฌ ์์ด๋ ํด๋น ๋ณ์์ ๋ํด ์๋ฌด๋ฐ ์ฐ์ฐ๋ ์ํํ ์ ์๊ฒ ํจ์ผ๋ก์จ ๋ฐํ์ ์ค๋ฅ์ ๊ฐ๋ฅ์ฑ์ ์ค์ธ๋ค๋ ์ฅ์ ๋ ์๋ค.
์ธ๋ถ API๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ํจ์์ ๋ฐํ ํ์ ์ unknown์ผ๋ก ์ง์ ์ ํ๋๋ฐ, ๊ทธ ์ด์ ๋ ํด๋น API์ ํธ์ถํ์๋
๊ฒฐ๊ณผ์ ๊ตฌ์ฒด์ ์ธ ํ์ ์ ๋ฏธ๋ฆฌ ์์ ์๊ธฐ ๋๋ฌธ์ด๋ค!
๐never
์๋ ๊ฐ์ ์งํฉ์ด์,ํจ์๊ฐ ์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ง ์๊ฑฐ๋ ์ ๋ ๋ฐํ๋์ง ์๋ ๊ฐ์ ๋งํ๋ค.
ํ์ ์คํฌ๋ฆฝํธ์์ ๊ทธ ์ด๋ค ๊ฒ๋ ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋ํ๋ด๋ ํ์ ์ด ํ์ํ๋ค.
When? ์ธ์ ์ฌ์ฉํ๋๊ฐ?
1. ์ ๋ ์คํ๋์ง ์๋ ํจ์
function throwError(message: string): never {
throw new Error(message); // ์ด ํจ์๋ ์ ๋ ์ ์์ ์ผ๋ก ์ข
๋ฃ๋์ง ์์
}
function infiniteLoop(): never {
while (true) {
// ๋ฌดํ ๋ฃจํ
}
}
๋ฌดํ ๋ฃจํ์ ๋น ์ง๊ฑฐ๋ ์์ธ๋ฅผ ๋์ ธ์ ์ ๋ ์ข ๋ฃ๋์ง ์์ ๋ never ํ์ ์ ๋ฐํํ๋ค๊ณ ๋ช ์ํ๋ค.
๋ฐ๋ผ์ ์ด ํจ์๋ค์ ์ด๋ค ๊ฐ๋ ๋ฐํํ์ง ์๋๋ค.
2. ์ถ๊ฐ์ ์ธ ์ผ์ด์ค๊ฐ ์๋ค๋ ๊ฒ์ ์ ํํ๊ฒ ๋ช ์
type Animal = 'cat' | 'dog';
function handleAnimal(animal: Animal) {
switch (animal) {
case 'cat':
console.log('Meow');
break;
case 'dog':
console.log('Woof');
break;
default:
const _exhaustiveCheck: never = animal; // ์ค๋ฅ ๋ฐ์, Animal์ ๋ ๋ง์ ๊ฐ์ด ์์ผ๋ฉด never๋ก ํ์ธ๋จ
break;
}
}
- ์ฝ๋ ๊ฐ๋ ์ฑ ๋ฐ ๋ช ์์ฑ ๊ฐํ
๊ฐ๋ฐ์๊ฐ ์ด ์ฝ๋๋ฅผ ๋ณผ ๋ ๋ชจ๋ ๊ฐ๋ฅํ ์ผ์ด์ค๋ฅผ ๋ค๋ค๋ค๋ ํ์ ์ ์ฃผ๋ ์ญํ ์ ํ์ฌ ๋ช ํํ ์๋ ์ ๋ฌ์ด ๊ฐ๋ฅํ๋ค.