[TypeScript] ๐Ÿณ 2.3 any, unknown

์กฐ์ค€ํ˜•ยท2021๋…„ 12์›” 6์ผ
0

TypeScript

๋ชฉ๋ก ๋ณด๊ธฐ
8/11
post-thumbnail

๐Ÿณ 2.3 any, unknown

2.3์—์„œ ์•Œ์•„๋ณผ ๊ฒƒ์€ any์™€ unknown์˜ ์ฐจ์ด, typeof ,instanceof ๋ฐ in์™ธ์—๋„ ์ปค์Šคํ…€ ํƒ€์ž… ๊ฐ€๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค.

๐ŸŒ any

anyํƒ€์ž… ๋ณ€์ˆ˜๋Š” ๋ชจ๋“  ํƒ€์ž…์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ํƒ€์ž…์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. anyํƒ€์ž…์—ญ์‹œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์ค‘ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๐ŸŒ unknown

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” 3.0๋ฒ„์ „์— ๋„์ž…๋์Šต๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๊ธฐ์ „ unknownํƒ€์ž…์˜ ๋ณ€์ˆ˜์— ํƒ€์ž… ๋ฒ”์œ„๋ฅผ ์ค„์ด๋ผ๊ณ  ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŒ any์™€ unknown์˜ ์ฐจ์ด

ํ”„๋ก ํŠธ์—”๋“œ์—์„œ Personํƒ€์ž…์„ ์„ ์–ธํ•˜๊ณ , ๋ฐฑ์—”๋“œ์—์„œ JSONํƒ€์ž…์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

// 2_25
type Person2_25 ={
    address: string;
}

let person1: any;

person1 = JSON.parse(`{"adress":"25Broadway"}`);

console.log(person1.address); // undefined ์ถœ๋ ฅ
// 2_26
let person2: unknown;

person2 = JSON.parse(`{"adress":"25Broadway"}`);

console.log(person2.address); // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ํƒ€์ž…๊ฐ€๋“œ๋กœ ๊ฐ์ฒด์˜ ํŠน์ • ํƒ€์ด๋ธก ใ„นํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒ€์ž…๊ฐ€๋“œ isPerson()์„ ๋งŒ๋“ค๊ณ , address ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฉด Person์ž„์„ ์ถœ๋ ฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

//2_27
const isPerson = (object:any): object is Person => "address" in object;

์ฃผ์–ด์ง„ ๊ฐ์ฒด๊ฐ€ address๋ฅผ ๊ฐ€์ง€๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

if(isPerson(person2)){
    console.log(person2.address);
} else{
    console.log('person2 is not a Person');
}

์ž˜๋ชป๋œ ๊ฐ์ฒด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š” ํ•œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ์—†์ด ์ž˜ ์ž‘๋™ํ•จ.
( null์ „๋‹ฌ ์‹œ address์—์„œ ์˜ค๋ฅ˜ )

// 2_29
const isPerson2_29 = (object: any): object is Person => !!object && 'address'in object;

bit.ly/2Vs2dp6์ฐธ๊ณ .

๊ฐ์ฒด๊ฐ€ ํŠน์ • ํƒ€์ž…์— ๋งค์นญ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋ช‡๊ฐ€์ง€ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋”ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋” ๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” ์‹๋ณ„์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  Personํƒ€์ž…์„ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ.

type Person = {
    discriminator: 'person';
    address: string;
}
const isPerson2_29 = (object: any): object is Person => !!object && object.disconnector === 'person'
profile
๊นƒํ—ˆ๋ธŒ : github.com/JuneHyung

0๊ฐœ์˜ ๋Œ“๊ธ€