μƒˆμ†Œμ‹

FrontEnd/TypeScript

[TypeScript] union type · any · unknown

  • -

🐣 union type · any · unknown κ³΅ν†΅μ μ΄λž„κΉŒ?


λ“€μ–΄κ°€κΈ° 전에 이 μ„Έκ°€μ§€μ˜ 곡톡점을 생각해보면! μ–΄λ–€ νƒ€μž…μ˜ μ’…λ₯˜κ°€ λ“€μ–΄μ˜¬μ§€ ν™•μ‹€ν•˜κ²Œ λͺ¨λ₯Ό λ•Œ μ‚¬μš©ν•œλ‹€λŠ” 점을 λ“€ 수 μžˆλ‹€. ν”„λ‘œμ νŠΈ λ‚΄μ—μ„œ μ‚¬μš©ν•  λ•Œμ—λ„ ν•΄λ‹Ή νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” κ²½μš°λŠ” number ν˜Ήμ€ string νƒ€μž… λ‘˜ 쀑에 λ“€μ–΄μ˜¨λ‹€λ“ μ§€...μ•„λ‹ˆλ©΄ μ–΄λ–€ νƒ€μž…μ΄ λ“€μ–΄μ˜¬ μ§€ λͺ°λΌμ„œ μ„€μ •ν•œλ‹€λ“ μ§€... 무튼..!_! ν•΄λ‹Ή μ„Έ κ°€μ§€μ˜ κ°œλ…μ— λŒ€ν•΄μ„œ 닀뀄보도둝 ν•˜μž!_! 꼬우꼬우!

(μ• λ‹ˆ νƒ€μž…μ„ μœ„ν•œ μ• λ‹ˆλ₯Ό κ°€μ Έμ˜΄)

 

μ• λ‹ˆ

 

 

참고둜 typescript μ„€μΉ˜ 및 κ°œλ…μ— λŒ€ν•΄μ„œ μ•Œκ³  μ‹Άλ‹€λ©΄ 이전 정리글 μ°Έκ³ 
 

[TypeScript] νƒ€μž…μŠ€ν¬λ¦½νŠΈ

🐣 νƒ€μž…μŠ€ν¬λ¦½νŠΈ 얍얍!μ˜€λŠ˜μ€ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— λŒ€ν•΄μ„œ μ •λ¦¬ν•΄λ³΄κ³ μž ν•œλ‹€. 흠 사싀 이전에 κ³΅λΆ€ν•˜λ©΄μ„œ Notionκ³Ό git에 μ½”λ“œλ‘œ μ •λ¦¬ν•΄λ’€λ˜κ±΄λ°, 이리저리 μš”λ¦¬μ‘°λ¦¬ κ°€μ Έμ™€μ„œ 정리보도둝 ν•˜κ² λ”°!_! 

haileyham.tistory.com

 

 

🐣 μœ λ‹ˆμ˜¨ νƒ€μž… (Union Type)


1. κ°œλ…

μ§€μ •λœ μ—¬λŸ¬ μœ ν˜•μ„ λ³΄μœ ν•  수 μžˆλŠ” μœ ν˜•μœΌλ‘œ, λ³€μˆ˜κ°€ μ—¬λŸ¬ μœ ν˜• 쀑 ν•˜λ‚˜κ°€ 될 수 있음. 이 λ³€μˆ˜μ— string ν˜Ήμ€ number λ“€μ–΄μ˜¬ 수 μžˆλ‹€λΌκ³  νƒ€μž… μ§€μ •ν•˜κ³  싢을 λ•Œ μ‚¬μš©. | μ—°μ‚°μž μ‚¬μš©

  • νƒ€μž… 2개 이상 ν•©μΉœ μƒˆλ‘œμš΄ νƒ€μž…
// string ν˜Ήμ€ number
let value: string | number = "Hello";

 

2. μ½”λ“œλ‘œ λ‹€μ‹œ μ‚΄νŽ΄λ³΄κΈ°

array ν˜Ήμ€ obejct 일 경우 ?

let μˆ«μžλ“€: (number|string)[] = [1, '2', 3];
let 였브젝트: { a: number | string } = { a: 123 };

 

 

🐣 μ• λ‹ˆ νƒ€μž… (Any Type)


1. κ°œλ…

λͺ¨λ“  값을 λ³΄μœ ν•  수 μžˆλŠ” μœ ν˜•μœΌλ‘œ, μœ ν˜• 검사λ₯Ό λΉ„ν™œμ„±ν™”ν•˜κ³  μ΅œλŒ€μ˜ μœ μ—°μ„±μ„ 제곡.

  • λͺ¨λ“  μžλ£Œν˜•μ„ ν—ˆμš©
  • νƒ€μž… 슀크립트 μ‚¬μš©ν•˜λŠ” μ˜λ―Έκ°€ μ‚¬λΌμ§ˆ μˆ˜λ„ μžˆμœΌλ‹ˆ, ν•„μš”ν•  λ•Œλ§Œ μ‚¬μš©ν•˜κΈ°
  • νƒ€μž… 버그 κ΄€λ ¨ μ—λŸ¬λ₯Ό λ°œμƒμ‹œμΌœμ£Όμ§€ μ•ŠμŒ
// 아무 νƒ€μž…μ΄λ‚˜ 올 수 있음
let anything: any = 42;

 

2. μ½”λ“œλ‘œ μ‚΄νŽ΄λ³΄κΈ°

μ•„λž˜μ˜ 경우 μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³Ό λ•Œ μ—λŸ¬λ₯Ό λ°œμƒμ‹œμΌœ μ£Όμ§€ μ•ŠλŠ” 것을 확인 ν•  수 있음. μ‚¬λžŒ1의 경우 any νƒ€μž…μ΄κ³  λ§ˆμ§€λ§‰μ— [] arrayλ₯Ό λ‹΄μ•˜μ§€λ§Œ, λ³€μˆ˜1 νƒ€μž…μ„ string으둜 ν–ˆμ„ λ•Œ μ‚¬λžŒ1(array)이 듀어가도 errorλ₯Ό 뿜뿜 ν•˜μ§€ μ•ŠμŒ.

let μ‚¬λžŒ1: any; //μ•„λ¬΄κ±°λ‚˜ λ“€μ–΄μ˜¬ 수 있음
μ‚¬λžŒ1 = 123;
μ‚¬λžŒ1 = [];

// μ—λŸ¬λ₯Ό λ°œμƒμ‹œμΌœμ£Όμ§€ μ•ŠμŒ
// μœ„μ—μ„œ μ‚¬λžŒλŠ” []둜 λ˜μ–΄μžˆκ³ , λ³€μˆ˜1은 stringμ΄μ–΄μ„œ λ§žμ§€ μ•Šμ§€λ§Œ μ—λŸ¬λ₯Ό λ°œμƒμ‹œμΌœμ£Όμ§€ μ•ŠμŒ
// any이기 λ•Œλ¬Έμ— λ§κ·ΈλŒ€λ‘œ μ•„λ¬΄κ±°λ‚˜ 올 수 있기 λ•Œλ¬Έ
let λ³€μˆ˜1: string = μ‚¬λžŒ1;

 

3. 더 λ‚˜μ•„κ°€μ„œ!

λ³€κ²½ν•˜λ €λŠ” λ³€μˆ˜μ˜ νƒ€μž…μ΄ λͺ…ν™•ν•΄μ•Ό 함. μ•„λž˜μ˜ 경우 string ν˜Ήμ€ number이 λ“€μ–΄μ˜¨λ‹€ ν–ˆλŠ”λ° +1을 ν•  경우, νƒ€μž…μ— 따라 ν•΄λ‹Ή κ²°κ³Ό 값이 달라지기 λ•Œλ¬Έμ— error 뿜뿜.

λ§Œμ•½ 기쑴에 '1' ν˜Ήμ€ 1이 ν• λ‹Ή λ˜μ–΄ μžˆμ—ˆλ‹€λ©΄?  string의 경우 '11'이 되고 number의 경우 2κ°€ 되기 λ•Œλ¬Έμž„!_! 

let 계산: string | number //union type은 μƒˆλ‘œμš΄νƒ€μž…μ„ λ§Œλ“€μ–΄ λ‚΄λŠ” 것
계산 + 1; //error

 

그럼 stringκ³Ό number 각 λ‹€μ‹œ μ‚΄νŽ΄λ³΄λ©΄ ν•΄λ‹Ή κ²°κ³Ό 값이 μ΄λ ‡κ²Œ λ‚˜μ˜¨λ‹€λŠ” 것을 확인 ν•  수 있음!_! 

let 계산1: string = '123';
let 계산2: number = 123;
계산1 + 1; //'1234'
계산2 + 1; //124

 

🐣 μ–Έλ…Έμš΄ νƒ€μž… (Unknown)


1. κ°œλ…

λͺ¨λ“  값을 λ³΄μœ ν•  수 μžˆμ§€λ§Œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° 전에 μœ ν˜• ν™•μΈμ΄λ‚˜ μœ ν˜• μ–΄μ„€μ…˜μ΄ ν•„μš”ν•œ μœ ν˜•. μ΅œκ·Όμ—λŠ” any λ³΄λ‹€λŠ” unknown을 μ‚¬μš©ν•œλ‹€κ³  함. any와 같이 λͺ¨λ“  νƒ€μž…μ„ 넣을 수 있음. 

// 아무 νƒ€μž…μ΄λ‚˜ 올 수 μžˆμ§€λ§Œ anyνƒ€μž…λ³΄λ‹€ μ•ˆμ „
// unknown은 νŠΉμ • λ°©μ‹μœΌλ‘œ μ‚¬μš© 전에 μœ ν˜• 확인 ν•„μš” 
let unknownValue: unknown = "Could be anything";



2. any νƒ€μž…κ³Ό λ‹€λ₯Έ 점?

'unknown' μœ ν˜•μ€ 'any'보닀 μ•ˆμ „ν•œ λŒ€μ•ˆ. μ–΄λ–€ 값이든 담을 수 μžˆμ§€λ§Œ anyμ™€λŠ” 달리 νŠΉμ • λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•˜κΈ° 전에 μœ ν˜• ν™•μΈμ΄λ‚˜ μ–΄μ„€μ…˜μ„ μˆ˜ν–‰ ν•„μš”. 

  • λͺ¨λ“  자료 넣을 수 있음 (any 곡톡점)
  • 자료 넣어도 νƒ€μž…μ€ κ·ΈλŒ€λ‘œ unknown (any와 λ‹€λ₯Έμ  - any 보닀 μ•ˆμ „ν•œ 이유)

 

3. μ½”λ“œλ‘œ μ‚΄νŽ΄λ³΄κΈ°

μœ„μ—μ„œ μ‚΄νŽ΄λ³Έ 것과 같이 unknownμ—λŠ” λͺ¨λ“  νƒ€μž…μ˜ μ’…λ₯˜λ₯Ό 넣을 수 μžˆμ§€λ§Œ, νƒ€μž…μ€ κ·ΈλŒ€λ‘œ unknwon μ΄λΌλŠ” 것을 μ•Œ 수 μžˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή unknown νƒ€μž…μ„ λ‹€λ₯Έ 곳에 λ„£μœΌλ €κ³  ν•˜λ©΄ errorκ°€ 뿜뿜 λ‚œλ‹€. λ‹€μŒ μ½”λ“œμ—μ„œ μ‚΄νŽ΄λ³΄λ©΄ μ•Œ 수 있음!

// unknown νƒ€μž… (any보닀 μ•ˆμ „)
let μ‚¬λžŒ4: unknown;
μ‚¬λžŒ4 = 123;
μ‚¬λžŒ4 = {};

// μ—λŸ¬ λ°œμƒ : μœ„μ—μ„œ μ‚¬λžŒ 4 {} λ˜μ–΄μžˆκ³ , λ³€μˆ˜2λŠ” string이기 λ•Œλ¬Έμ— λ§žμ§€ μ•ŠμŒ
let λ³€μˆ˜2: string = μ‚¬λžŒ4; //error

// 정상 μž‘λ™ : μœ„μ—μ„œ μ‚¬λžŒ 4 {}, λ³€μˆ˜3도 {} 이기 λ•Œλ¬Έ 
// strictλͺ¨λ“œμ—μ„œλŠ” x 
// 자료 집어넣어도 νƒ€μž…μ€ κ·ΈλŒ€λ‘œ unknown
let λ³€μˆ˜3: {} = νšŒμ›4; // // strictλͺ¨λ“œμ—μ„œλŠ” error

 

4. λ” λ‚˜μ•„κ°€μ„œ!

λ‹€μŒμ˜ 경우 계산3 - 1μ—μ„œ errorκ°€ λ‚˜λŠ”λ°, κ·Έ μ΄μœ λŠ” unknown이 number μ•„λ‹ˆκΈ° λ•Œλ¬Έμž„

let 계산3: unknown = 1;

//μˆ«μžνƒ€μž…μ΄μ—¬μ•Ό 숫자처럼 연산함. unknown이 μ™”κΈ° λ•Œλ¬Έμ— error
계산3 - 1; //error

 

 

🐣 이건 μ–΄λ•Œ!


let user = 'ham';
let age = undefined;
let married  = false; 
let ν–„ = [user, age, married];

let user :string = 'ham';
let age : undefined | number = undefined; //undefined둜 λ„£μœΌλ©΄ strict λͺ¨λ“œμ—μ„œλŠ” error
let married :boolean = false; 
let ν–„1: (string | number | undefined | boolean)[] = [user, age, married];

 


νƒ€μž… 정리 였랜만이ꡰ!_!
λ‹€μŒ μ‹œκ°„μ—λŠ” void type 에 λŒ€ν•΄μ„œ μ‚΄νŽ΄λ³΄μžκΎΈ!

 

 

[TypeScript] void type

🐣 λ“€μ–΄κ°€κΈ° μ „μ—μ΄λ²ˆμ—λŠ” void type에 λŒ€ν•΄μ„œ 정리해보μž₯!_! void νƒ€μž…μ€ ν•¨μˆ˜μ˜ νƒ€μž…μ„ μ§€μ •ν•  λ•Œ μ‚¬μš©ν•œλ‹€κ³  μƒκ°ν•˜λ©΄ λœλ‹€. 'void'의 경우 값이 μ—†μŒμ„ λ‚˜νƒ€λ‚΄λŠ”λ°, 아무것도 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”(=return

haileyham.tistory.com

 

Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.