2.3์์ ์์๋ณผ ๊ฒ์ any์ unknown์ ์ฐจ์ด, typeof ,instanceof ๋ฐ in์ธ์๋ ์ปค์คํ ํ์ ๊ฐ๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณผ ๊ฒ์ด๋ค.
anyํ์
๋ณ์๋ ๋ชจ๋ ํ์
์ ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค.
ํ์
์คํฌ๋ฆฝํธ์์ ํ์
์ ์์ฑํ์ง ์๋๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. anyํ์
์ญ์ ์กด์ฌํ์ง ์๋ ํ๋กํผํฐ์ ์ ๊ทผํ๋ฉด ๋ฐํ์ ์ค ์๊ธฐ์น ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
ํ์ ์คํฌ๋ฆฝํธ๋ 3.0๋ฒ์ ์ ๋์ ๋์ต๋๋ค.
์ปดํ์ผ๋ฌ๋ ํ๋กํผํฐ์ ์ ๊ทผํ๊ธฐ์ 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'