06. ๐ฆ TypeScript any vs unknown ์ ๋ฆฌ
๐ 1. any โ ํ์ ๊ฒ์ฌ ํฌ๊ธฐ
- any๋ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๋ชจ๋ ํ์ ๊ฒ์ฌ๋ฅผ ํฌ๊ธฐํจ (์ง์์ฑ)
- ๋ง์น ์๋ฐ์คํฌ๋ฆฝํธ์ฒ๋ผ ๋์ํจ
- ํ์ ์์ ์ฑ์ด ์์ ํ ๊นจ์ง๋ฏ๋ก ์ฌ์ฉ ์ง์
let value: any = "hello";
value.toFixed(); // ๋ฐํ์ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ (์ปดํ์ผ๋ฌ๋ ์ฒดํฌ ์ ํจ)
์ฅ์ : ๋น ๋ฅด๊ฒ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ ๋จ์ : ๋ชจ๋ ํ์ ์์ ์ฑ์ ์์คํจ, ์คํ, ํ์ ์ค๋ฅ๋ฅผ ์ก์ง ๋ชปํจ
๐ 2. unknown โ ํ์ ์ ๋ชจ๋ฅด์ง๋ง ์์ ํ๊ฒ ๋ค๋ฃจ๊ณ ์ถ์ ๋
- any์ฒ๋ผ ์๋ฌด๊ฑฐ๋ ํ ๋น ๊ฐ๋ฅํ์ง๋ง, ์ง์ ์ฌ์ฉํ ๋๋ ํ์ ์ ํ์ธํ๊ฑฐ๋ ๋จ์ธํด์ผ ํจ
- ์ฃผ๋ก ์๋ฌ ์ฒ๋ฆฌ, ์ธ๋ถ ๋ฐ์ดํฐ, ์ ํธ ํจ์ ๋ฑ์์ ๋ง์ด ์ฌ์ฉ
let input: unknown = "hello";
// input.toUpperCase() // โ ์๋ฌ ๋ฐ์
if (typeof input === "string") {
input.toUpperCase(); // โ
ํ์
ํ์ธ ํ ์ฌ์ฉ ๊ฐ๋ฅ
}
๐ 3. ์ค์ ์: try-catch์์ unknown
TypeScript 4 ์ด์์์๋ catch(error)์ ํ์ ์ด ๊ธฐ๋ณธ์ ์ผ๋ก unknown์ ๋๋ค.
try {
throw new Error("์์ธ ๋ฐ์");
} catch (error) {
// error๋ unknown ํ์
// error.message โ ์ ๊ทผ ๋ถ๊ฐ
if (error instanceof Error) {
console.log(error.message); // โ
์์ ํ๊ฒ ์ ๊ทผ ๊ฐ๋ฅ
}
// ๋๋ ๋จ์ธ
const e = error as Error;
console.log(e.message);
}
- โ ์์ ์ ์๋ฌต์ ์ผ๋ก any์๊ณ , ์ค๋ฅ ์ฒ๋ฆฌ ์ค ๋ ์ค๋ฅ ๋๋ ์ผ์ด ๋ง์์
- โ ๊ทธ๋์ ๊ธฐ๋ณธ ํ์ ์ unknown์ผ๋ก ๋ฐ๊พผ ๊ฒ
๐ 4. ํ์ ๋จ์ธ์ด ํ์ํ ๊ฒฝ์ฐ (as)
์: ์ธํฐํ์ด์ค ๋ฆฌํด๊ฐ๊ณผ void ํ์ ๋ฌธ์
interface A {
talk: () => void;
}
const a: A = {
talk() {
return 3; // โ ๋ฆฌํด๊ฐ ์์ (ํ์
์ ์๋ void)
}
};
const result = a.talk(); // TypeScript๋ result๋ฅผ void๋ก ์ฒ๋ฆฌ
// const result = a.talk() as number // โ ์ค๋ฅ๋ ์ ๋์ง๋ง ํ์
๋ถ์ผ์น
console.log(result); // undefined๊ฐ ์๋ 3์ด ์ถ๋ ฅ๋จ (TS๋ ์ฒดํฌ๋ง, JS๋ ์คํ๋จ)
๐ ํ์ ๊ฒ์ฌ vs ์คํ ๊ฒฐ๊ณผ์ ์ฐจ์ด TypeScript๋ ํ์ ๊ฒ์ฌ๊ธฐ์ผ ๋ฟ์ด๊ณ JS ์คํ ๊ฒฐ๊ณผ์ ์์ ํ ์ผ์นํ์ง๋ ์์ต๋๋ค.
ํ์ ์ void โ ๋ฆฌํด๊ฐ ์์ด์ผ ํ์ง๋ง
JS์์๋ return 3์ด๋ฏ๋ก ์ค์ ๊ฐ์ 3
๐ 5. ์ ๋ฆฌ ์์ฝ
ํญ๋ชฉ | any | unknown |
---|---|---|
ํ์ ๊ฒ์ฌ | โ ์์ ํ ํฌ๊ธฐ | โ ์ฌ์ฉ ์ ์ ํ์ ์ฒดํฌ or ๋จ์ธ ํ์ |
ํ ๋น ๊ฐ๋ฅ์ฑ | ์๋ฌด ํ์ ์ ํ ๋น ๊ฐ๋ฅ | ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋ฅ |
์ฌ์ฉํ ๋ ์ ํ | ์์ (์ํ) | ์์ (์์ ) |
์ฌ์ฉ ๋ชฉ์ | ์์ ์์ , ๋น ๋ฅธ ํ๋กํ ํ์ | ์ธ๋ถ ๋ฐ์ดํฐ, ์๋ฌ ์ฒ๋ฆฌ ๋ฑ ์ ์คํ๊ฒ ๋ค๋ค์ผ ํ ์ํฉ |
โ ์ถ์ฒ ์ฌ์ฉ๋ฒ
์ํฉ ์ถ์ฒ ํ์
- ๋น ๋ฅธ ํ ์คํธ์ฉ, ์์ ์คํฌ๋ฆฝํธ ์์ฑ any (๋จ๊ธฐ์ ์ผ๋ก๋ง)
- ์๋ฌ, JSON ํ์ฑ, ์ธ๋ถ API ์๋ต unknown
- ๋์ ํ์ ์ ๋ถ๊ธฐํด ์ ์ ํ ๋ unknown + ํ์ ๊ฐ๋ ๐ฆ ์์ ์์ฝ
function parse(json: string): unknown {
return JSON.parse(json);
}
const raw = parse('{"name": "sunbin"}');
// typeof ์ฒดํฌ ์์ด ์ฌ์ฉ ๋ถ๊ฐ
// console.log(raw.name) โ
// ํ์
๋จ์ธ ๋๋ ๊ฐ๋ ํ์
if (typeof raw === "object" && raw !== null && "name" in raw) {
console.log((raw as any).name); // โ
}
Last updated on