Skip to Content
Sunbeen's Blog
Documents๊ตฌ TypescriptBasic_Grammer06. ๐ŸŸฆ TypeScript any vs unknown ์ •๋ฆฌ

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. ์ •๋ฆฌ ์š”์•ฝ

ํ•ญ๋ชฉanyunknown
ํƒ€์ž… ๊ฒ€์‚ฌโŒ ์™„์ „ํžˆ ํฌ๊ธฐโœ… ์‚ฌ์šฉ ์ „์— ํƒ€์ž… ์ฒดํฌ 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