07. ๐ฆ TypeScript void, undefined, ์ธํฐํ์ด์ค ๋ณํฉ ์ ๋ฆฌ
๐ 1. void์ undefined๋ ๋ค๋ฅด๋ค
- void : ๋ฐํ๊ฐ์ ์ ๊ฒฝ์ฐ์ง ์๊ฒ ๋ค๋ ์๋ฏธ์ ํ์
- undefined : ์ค์ JS ๊ฐ undefined์ ํด๋นํ๋ฉฐ, ํ ๋น๋๊ฑฐ๋ ๋ฐํ๋ ์ ์์
โ ์์ : void๋ undefined๋ง ๋ฐํ ๊ฐ๋ฅ
function a(): void {
// return '3';
// return 4;
// return null;
return undefined; // โ ์๋ฌ ์๋ (๋จ, ๋ฐํ๊ฐ์ ๋ฌด์๋จ)
}
const result = a(); // result ํ์
์ void
console.log(result); // ์ถ๋ ฅ: undefined
๐ TypeScript๋ ๋ฆฌํด๊ฐ์ ์ฌ์ฉํ์ง ์๊ฒ ๋ค๋ ๋ป์ด์ง, ๋ฐํ๊ฐ์ด ์๋ค๋ ๋ป์ ์๋.
๐ 2. ์ฝ๋ฐฑ ํจ์์์์ void ์๋ฏธ
function forEach(arr: number[], callback: (el: number) => void): void {
for (let el of arr) {
callback(el);
}
}
forEach([1, 2, 3], (el) => {
return "abc"; // โ
ํ์ฉ๋จ. ๋ฐํ๊ฐ์ ์ฌ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ
});
์ฝ๋ฐฑ ํจ์์ void๋ฅผ ์ฐ๋ฉด โ๋ฐํ๊ฐ์ ๊ธฐ๋ํ์ง ์๋๋คโ๋ ์๋ฏธ์ด์ง, ๋ฆฌํดํ์ง ๋ง๋ผ๋ ์๋ฏธ๋ ์๋.
๐ 3. Declare
declare๋?
-
TypeScript์์ โ์ด๊ฑด JS ์ด๋๊ฐ์ ์ด๋ฏธ ์ ์๋ผ ์์ผ๋, ํ์ ๋ง ์ ์ธํ ๊ฒ!โ ๋ผ๊ณ ์๋ ค์ฃผ๋ ํค์๋
-
declare๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ณํ์ ์ฌ๋ผ์ง๋ค.
-
declare๋ฅผ ๋ง๋ค์ด๋๋ฉด, ํ์ ์ ์ธ๋ง ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
-
ํ์ ๋ง ์ ์ธ : JS์๋ ์ค์ ์ฝ๋๊ฐ ์๋๋ฐ, TS์์ ํ์ ๋ง ํ์ํ ๋
-
JS ๊ตฌํ ์์ด ํ์ ๋ณด์ฅ : ์ฝ๋ ์์ด ์กด์ฌํ๋ ๊ฒ์ฒ๋ผ ์ ์ธํ ์ ์์ (.d.ts)
-
๊ธ๋ก๋ฒ ๋ณ์/ํจ์ ์ ์ธ : ๋ธ๋ผ์ฐ์ ์ ์ญ API, ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณ์ ๋ฑ
๐ 4. undefined๋ฅผ ๋ฆฌํด ํ์ ์ผ๋ก ์ผ์ ๋
declare function forEach(arr: number[], callback: (el: number) => undefined): void;
// target.push(el)์ ๋ฆฌํด๊ฐ์ number์ด๋ฏ๋ก ์๋ฌ ๋ฐ์ โ
forEach([1, 2, 3], (el) => {
target.push(el); // โ Error: number ๋ฐํ โ undefined ์๋
});
//2๊ฐ์ ํจ์๊ฐ ์กด์ฌํ๋ค๊ณ ํ์๋
//declare function forEach(arr: number[], callback: (el:number) => void): void ์๋ฌ๊ฐ ๋์ง์์
void๋ ๋ฆฌํด๊ฐ์ ๋ฌด์ํ๋ฏ๋ก ๊ด์ฐฎ์ง๋ง,
undefined๋ ์ ํํ undefined๋ฅผ ๋ฐํํด์ผ ํจ โ return; ๋๋ return undefined; ๋ง ํ์ฉ
๐ 5. ์ธํฐํ์ด์ค์์ void ๋ฆฌํด ํจ์
interface Human {
talk: () => void;
}
const human: Human = {
talk() {
return "hello"; // โ
ํ์ฉ๋จ, ๋ฆฌํด๊ฐ ๋ฌด์๋จ
}
};
๋ฉ์๋ ์๊ทธ๋์ฒ๊ฐ (): void์ฌ๋ ๋ฆฌํด๊ฐ์ด ์์ด๋ OK
๋จ, ๊ทธ ๋ฆฌํด๊ฐ์ ํธ์ถ์ฒ์์ ์ธ ์ ์์
๐ 6. void ๋ฐํ์ ์ฐํํด ํ์ ์ง์ ํ๋ ๊ฒฝ์ฐ
interface A {
talk: () => void;
}
const a: A = {
talk() {
return 3; // โ
ํ์ฉ๋จ (๋ฌด์๋จ)
}
};
const b1 = a.talk(); // ํ์
์ void
// const b2 = a.talk() as number // โ ์๋ฌ
const b3 = a.talk() as unknown as number; // โ
์ฐํ ๊ฐ๋ฅ
const b4 = <number>(<unknown>a.talk()); // โ
์ฐํ ๊ฐ๋ฅ