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

frond-end

[typescript] any VS unknown

 

 

๐Ÿข anyScript ๋Š” ์ด์ œ ๊ทธ๋งŒ

 

ํ”„๋กœ์ ํŠธ์˜ tsconfig.json ํŒŒ์ผ์—์„œ compilerOptions  ์—์„œ [์ฐธ๊ณ :  https://www.typescriptlang.org/tsconfig]

noImplicityAny ๋Š” any ๋ผ๋Š” ํƒ€์ž…์ด ์˜๋„์น˜์•Š๊ฒŒ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ๋„์›Œ์ฃผ๋Š” ์„ค์ •์ด๋‹ค

์ฆ‰, true ๋กœ ์„ค์ •ํ•  ๊ฒฝ์šฐ any ๋กœ ์ถ”๋ก ๋  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ feature ๋ฅผ ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋ฉด ์‹œ๊ฐ„์— ์ซ“๊ธฐ๊ฑฐ๋‚˜ ํ˜น์€ ๊ท€์ฐฎ์•„์„œ ํƒ€์ž… ์ง€์ •์‹œ any ๋ฅผ ๋‚จ๋ฐœํ•˜๊ฒŒ ๋˜๋Š”๋ฐ...

 

'any' ํƒ€์ž…์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž… ์ฒดํฌ๋ฅผ ์™„์ „ํžˆ ๋ฌด์‹œํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค€๋‹ค. 'any' ํƒ€์ž…์˜ ๋ณ€์ˆ˜์—๋Š” ์–ด๋–ค ์ข…๋ฅ˜์ด ๊ฐ’์ด๋“  ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด๋„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

 

๊ฒฐ๊ตญ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฌดํšจํ™”(?) ์‹œํ‚ค๋Š”๊ฑฐ์™€ ๋‹ค๋ฆ„์ด ์—†์–ด์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์“ฐ๋Š” ์ด์œ ๊ฐ€ ์—†์–ด์ง€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ํƒ€์ž…์ง€์ •์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ์‹œ ๊ธฐ๋ณธ์ค‘์— ๊ธฐ๋ณธ์ด ๋˜์–ด์•ผ ํ•œ๋‹ค .. (๋ฐ˜์„ฑํ•˜์ž)

 

 

๐Ÿข unknown ํƒ€์ž…?

 

'unknown' ํƒ€์ž…์€ any ์™€ ๋น„์Šทํ•˜๊ฒŒ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๊ฐ’์ด๋“  ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,

ํ•ด๋‹น ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ํƒ€์ž…์„ ์ขํ˜€์„œ (type narrowing) ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. โžก๏ธ ์ด๋Š” ๋” ์•ˆ์ „ํ•œ ๋ฐฉ์‹์„ ์ œ๊ณตํ•œ๋‹ค.

 

let something: unknown = "hello";
something = 3; // No error
something = []; // No error

// Before we can call any method or property on it, we have to check its type
if (typeof something === "string") {
    console.log(something.toUpperCase()); // OK
}

if (something instanceof Array) {
    console.log(something.push(1)); // OK
}

 

 

 

๐Ÿข ๋น„๊ต

// any ์‚ฌ์šฉ
let value1: any = 10;
let value2: any = 'hello';

// unknown ์‚ฌ์šฉ
let value3: unknown = 10;
let value4: unknown = 'hello';

// unknown ์„ any ๋กœ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
let anyValue: any = value3; 

// BUT! unknown์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ช…์‹œ์ ์ธ ํƒ€์ž… ํ™•์ธ์ด ํ•„์š”ํ•จ
let numberValue: number = value3; //ERROR
if(typeof value3 === 'number') {
	numberValue = value3; // ํƒ€์ž… ํ™•์ธ ํ›„ ํ• ๋‹น ๊ฐ€๋Šฅ
}

 

 

 

 

๐Ÿข ๊ทธ๋ž˜์„œ ์–ธ์ œ ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜?

โœ”๏ธŽ ๊ฐ€๋Šฅํ•œ ํ•œ 'any' ์‚ฌ์šฉ์„ ํ”ผํ•˜๊ณ , ํƒ€์ž…์„ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์„๋•Œ๋Š” ํ•ญ์ƒ ๋ช…ํ™•ํ•œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

โœ”๏ธŽ ์ฝ”๋“œ์˜ ํŠน์ • ๋ถ€๋ถ„์—์„œ ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ 'unknown' ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ด๋Š” ๊ทธ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ํƒ€์ž…์„ ํ™•์ธํ•˜๋„๋ก ๊ฐ•์ œํ•œ๋‹ค. ๋” ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋กœ ์ด์–ด์ง.

 

728x90
๋ฐ˜์‘ํ˜•