๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TS

[TS] : any unknown union

by ๊ถŒ์Šพํ–„ 2023. 8. 21.

any < unknown < union

๊ฐœ์ธ์ ์œผ๋กœ TS ๊ฐ€ JS ์™€ ๊ฐ€์žฅ ํฐ ์ฐจ๋ณ„์ ์„ ๋‘๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด๋ผ ํ•จ์€, ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์„ "๋ช…์‹œ"ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์ด "๋Ÿฐํƒ€์ž„"์— ๊ฒฐ์ •๋˜๋Š” JS์™€ ๋‹ฌ๋ฆฌ TS๋Š” ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ํƒ€์ž…์ด ์ •ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋ณดํ†ต์€ TS์—์„œ ๊ฐ ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด ์ฃผ์ง€๋งŒ,

์–ด์ฉ” ์ˆ˜ ์—†์ด ๊ฐ€๋ณ€์ ์ธ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด any๋ฅผ ์“ฐ๊ธฐ๋ณด๋‹ค๋Š” unknown์„ ์‚ฌ์šฉ๋Š”๊ฒƒ์ด ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค.
๊ทธ๋ฆฌ๊ณ , ๊ฐ€๋ณ€์ ์ธ ํƒ€์ž…์„ ์ผ์ผ์ด ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด union ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ์ข‹์€ ๋ฐฉ์•ˆ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

๋ฌผ๋ก  ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์ด๋‹ค.

 

any

TS ์—์„œ any ํƒ€์ž…์€ ๋ชจ๋“  ํƒ€์ž…์˜ ์Šˆํผ ํƒ€์ž…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์–ด๋–ค ํƒ€์ž…์˜ ๊ฐ’์ด๋“  ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

JS ์˜ object ํƒ€์ž…๊ณผ ๊ฐ™์€ ์ตœ์ƒ์œ„ ํƒ€์ž…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค.

 

any ์‚ฌ์šฉ ์‚ฌ๋ก€

let anything: any;
anything = 5;
anything = 'Hello';
anything = { id: 1, name: 'John' };

anything ์ด๋ผ๋Š” ์‹๋ณ„์ž์˜ ํƒ€์ž…์€ any๋กœ ๋ช…์‹œํ•ด์ฃผ์—ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์žฌํ• ๋‹น์„ ํ†ตํ•ด ์ˆซ์ž / ๋ฌธ์ž / object์˜ ๋ชจ๋“  ํ˜•ํƒœ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋‹ด์•„์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

TS ์—์„œ any ๋ฅผ ์‚ฌ์šฉํ•จ์— ๋Œ€ํ•˜์—ฌ

์šฐ๋ฆฌ๊ฐ€ TS ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ๋œ ์ด์œ ์™€ ๋ชฉ์ ์ค‘์˜ ํ•˜๋‚˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, any ํƒ€์ž…์€ ๊ทธ ๋ชฉ์ ์„ฑ์—์„œ ์กฐ๊ธˆ ๋ฒ—์–ด๋‚œ ๋А๋‚Œ์ด ๋“ ๋‹ค.

any ํƒ€์ž…์€ ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ์ €ํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

unknown

any์˜ ๋Œ€์ฒด์ œ

unknown ํƒ€์ž…์€ any ํƒ€์ž…๊ณผ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•˜์ง€๋งŒ ๋” ์•ˆ์ „ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

unknown ํƒ€์ž…์˜ ๋ณ€์ˆ˜์—๋„ any์™€ ๊ฐ™์ด ๋ชจ๋“  ํƒ€์ž…์˜ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด์š”.

ํ•˜์ง€๋งŒ, ๊ทธ ๊ฐ’์„ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด์„  ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ํ™•์ธํ•ด์•ผ๋งŒ ํ•œ๋‹ค.

 

unknown ์‚ฌ์šฉ ์‚ฌ๋ก€

์‹๋ณ„์ž์˜ ํƒ€์ž…์„ unknown์œผ๋กœ ์ง€์ •ํ•ด์ฃผ๊ณ , ํ• ๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ํ• ๋‹นํ–ˆ๋‹ค.

let unknownValue: unknown = '๋‚˜๋Š” ๋ฌธ์ž์—ด';
console.log(unknownValue); // ๋‚˜๋Š” ๋ฌธ์ž์—ด

let stringValue: string;
stringValue = unknownValue; // ์—๋Ÿฌ ๋ฐœ์ƒ! unknownValue๊ฐ€ string์ž„์ด ๋ณด์žฅ์ด ์•ˆ๋จ
stringValue = unknownValue as string;
console.log(stringValue); // ๋‚˜๋Š” ๋ฌธ์ž์—ด

๋ฌธ์ž์—ด๋กœ ์ง€์ •ํ•œ ์‹๋ณ„์ž์™€ ์œ„์— ๋ฌธ์ž์—ด์„ ํ• ๋‹นํ•œ ์‹๋ณ„์ž์— ๋“ฑํ˜ธ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋ฌธ์ž์—ด์„ ๋‹ด๊ณ ์žˆ๋Š” unknown ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•œ๋‹ค๋ฉด,
error๊ฐ€ ๋ฐœ์ƒ์ด ๋œ๋‹ค.

๋‹ค๋งŒ, unknown์„ alias๋กœ ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•ด์ค€๋‹ค๋ฉด, ์ •์ƒ์ ์œผ๋กœ ํ• ๋‹น์ด ๋˜๊ณ , console.log์—๋„ ์ถœ๋ ฅ๊ฐ’์ด ์ •์ƒ์ ์œผ๋กœ ํ• ๋‹นํ•œ ๋ฌธ์ž์—ด ๊ฐ’์ด ๋‚˜์˜ค๋Š”๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ unkwown ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํƒ€์ž… ๋‹จ์–ธ์„ ํ†ตํ•ด ํƒ€์ž… ๋ณด์žฅ์„ ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์˜ alias๋ฅผ ํ†ตํ•œ ๋ช…์‹œ์  ํ‘œํ˜„์ด ํƒ€์ž… ๋‹จ์–ธ ์ด๋‹ค.

 

๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” typeof ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

let unknownValue: unknown = '๋‚˜๋Š” ๋ฌธ์ž์—ด';
let stringValue: string;

if (typeof unknownValue === 'string') {
  stringValue = unknownValue;
  console.log('unknownValue๋Š” ๋ฌธ์ž์—ด');
} else {
  console.log('unknownValue๋Š” ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋‹ค');
}

typeof ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฏธ๋ฆฌ ํƒ€์ž…์„ ์ฒดํฌํ•œ ํ›„,
unknown ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋ฅผ string ํƒ€์ž…์˜ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

 

unknown ์˜ ํ•œ๊ณ„

unknown ํƒ€์ž…์ด ๊ทธ๋‚˜๋งˆ ์žฌํ• ๋‹น์„ ํ•  ๋•Œ ํƒ€์ž… ์ฒดํฌ๊ฐ€ ๋˜์–ด์„œ ์•ˆ์ „ํ•จ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋งŒ, unknown ํƒ€์ž…๋„ ๊ฒฐ๊ตญ ์žฌํ• ๋‹น์ด ์ผ์–ด๋‚˜์ง€ ์•Š์œผ๋ฉด ํƒ€์ž… ์•ˆ์ „์„ฑ์ด ๋ณด์žฅ์ด ๋˜์ง€ ์•Š๋Š” ๋‹ค๋Š” ํŠน์ง•์ด ์กด์žฌํ•œ๋‹ค.

 

union

์ด๋Ÿด ๋•Œ๋ฅผ ์œ„ํ•ด union ํƒ€์ž…์ด๋ผ๋Š” ๊ฒƒ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

union ์€ ์—ฌ๋Ÿฌ ํƒ€์ž… ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ์ด ๋œ๋‹ค.

union์€ < | > ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ๊ฒฐํ•ฉํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

union ์‚ฌ์šฉ ์‚ฌ๋ก€

type StringOrNumber = string | number; // ์›ํ•œ๋‹ค๋ฉด | boolean ์ด๋Ÿฐ์‹์œผ๋กœ ํƒ€์ž… ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

function processValue(value: StringOrNumber) {
  if (typeof value === 'string') {
    // value๋Š” ์—ฌ๊ธฐ์„œ string ํƒ€์ž…์œผ๋กœ ๊ฐ„์ฃผ
    console.log('String value:', value);
  } else if (typeof value === 'number') {
    // value๋Š” ์—ฌ๊ธฐ์„œ number ํƒ€์ž…์œผ๋กœ ๊ฐ„์ฃผ
    console.log('Number value:', value);
  }
}

processValue('Hello');
processValue(42);
  • TypeScript๋ฅผ ์“ฐ๋ฉด์„œ ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋กœ ํ•ด๊ฒฐํ•˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์€ ๊ฐ€๊ธ‰์  ์ง€์–‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ์ด๋Ÿฐ ์‚ฌ์†Œํ•œ ์Šต๊ด€๋“ค์ด ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ณ  ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

 

 

#ts #union #any #unknown #

'TS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TS] : utility type  (0) 2023.08.22
[TS] : ์ ‘๊ทผ ์ œํ•œ์ž  (0) 2023.08.22
[TS] : tuple enum  (0) 2023.08.18
[TS] : .d.ts  (0) 2023.08.17
[TS] : tsconfig.json  (0) 2023.08.17