๐ ํ์ ์คํฌ๋ฆฝํธ ์ ๋ฌธ 08 : ํ์ ๋จ์ธ & ํ์ ๊ฐ๋ ์์๋ณด๊ธฐ
๐ ํ์ ๋จ์ธ ์์๋ณด๊ธฐ
var a;
์ด๋ ๊ฒ๋ง ์ ์ธํ a์ ๋ํ ํ์ ์ any๊ฐ ๋๊ณ
a = 20;
์ด๋ ๊ฒ ์ซ์๋ก ๋์ ํ a๋ ์ซ์๋ก ์ถ๋ก ์ด ๋๋ค.
a = 'a';
์๋ ๋ฌธ์์ด๋ก ์ถ๋ก ์ด ๋๋ค.
var b = a;
์๋ ์๋๊ฐ์ผ๋ฉด ๋งจ ์ฒ์์ ์ ์ธ๋ any๊ฐ b์ ํ ๋น๋๋ค.
var b = a as string;
์ด๋ ๊ฒ as ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ํ์ ์ ์ ์ธํ๋ฉด ์ ์ธ ํ ํ์ (string)์ผ๋ก ์ง์ ๋๋ค. ์ด์ฒ๋ผ ํ์ ๋จ์ธ์ ํ์ ์คํฌ๋ฆฝํธ๋ณด๋ค ๊ฐ๋ฐ์๊ฐ ํ์ ์ ๋ ์ ์๊ณ ์๋ค๋ผ๋ ์๋ฏธ๋ก ํ์ ์คํฌ๋ฆฝํธ ๋๋ ์ ๊ฒฝ์ฐ์ง ๋ง๊ณ ๋ด๊ฐ ์ ํ ํ์ ์ ๊ฐ์ฃผํ๋ผ... ์๋ฐ ๋๋์ผ๋ก ๋ฐ์๋ค์ด๋ฉด ๋๋ค.
๐ DOM API ์กฐ์
<div id="app">hi</div>
var div = document.querySelector('div');
if (div) {
div.innerText
}
์นํ์ด์ง์ ํ๊ทธ๋ฅผ ์กฐ์ํด์ค ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ API๋ querySelector์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ฝ๋์ฒ๋ผ DIV๋ผ๋ ๋ณ์์ ๋ด์ ํ๊ทธ์ ์ ๊ทผํ๋ฉด ์์์ HTMLElement๋ผ๊ณ ์ถ๋ก ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ if๋ฌธ์ผ๋ก div๊ฐ ์๋์ง ํ์ธ์ ํ๊ณ ๊ทธ ๋ค์์ ์กฐ์์ ํด์ฃผ๋๊ฒ ์ผ๋ฐ์ ์ธ ํ์ ๋จ์ธ์ ํจํด์ด๋ค. div๋ผ๋ ๊ฐ์ด null์ผ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ ํธ์ถ๋ div๊ฐ ์ด๋ค ๊ฑธ ๋ฐ๋ ค์ค๋์ง div๊ฐ ์๋์ง๋ฅผ if๋ฌธ์ ํตํด ํ์ธํด๋ณด๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ด๋,
var div = document.querySelector('div') as HTMLDivElement;
div.innerText;
์ด๋ ๊ฒ as๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ๋ฆฌ HTMLElement๋ก ํ์ ์ ๋จ์ธํด์ฃผ๋ ๊ฒ์ด๋ค. as๋ฅผ ์ฐ๋ ์์ ์๋ ์ฝ๋๊ฐ ๋์๊ฐ ๋ querySelector๊ฐ HTMLElement๋ผ๊ณ ๋จ์ธํด์ค๋ค.
๐ ํ์ ๊ฐ๋ ์์๋ณด๊ธฐ
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
age: number;
}
function introduce(): Developer | Person {
return { name: 'Tony', age: 33, skill: 'Iron Making'}
}
var Tony = introduce();
console.log(Tony.name);
if ((Tony as Developer).skill) {
var skill = ((Tony as Developer).skill);
console.log(skill);
} else if ((Tony as Person).age) {
var age = (Tony as Person).age;
console.log(age);
}
์ธํฐํ์ด์ค ์ ์ธํด์ฃผ๊ณ , introduce๋ผ๋ ํจ์์ ์ ๋์จ ํ์ ์ผ๋ก ์์ฑํ์ฌ Tony๋ฅผ ํธ์ถํด์คฌ๋ค. ๊ทธ๋ฆฌ๊ณ if๋ฌธ์ ์ฌ์ฉํ์ฌ ํ์ ๋จ์ธ ๋ฐฉ์์ผ๋ก as๋ฅผ ์จ๊ฐ๋ฉฐ ํ์ ์ด ์๋ ์๋ ํ์ธํ๋ ๊ณผ์ ์ด๋ค. ์ฒซ ์ค์๋ Tony as Developer๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฒจ๋กํผ์ skill์ด ์๋ ์๋ ํ์ธ์ ํ ํ์ ์์ผ๋ฉด ๋ skill์ด๋ผ๋ ๊ฒ์ ํธ์ถํด์ฃผ๋๋ก ๋ณ์์ ๋ด๋ ์ด ๊ณผ์ ์ ๋ฐ๋ณตํด์ ๋ง๋ค์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ๋ ์ฑ๋ ๋จ์ด์ง๊ณ ์ฌ๋ฌ๋ฒ ์ ์ธํด์ผ ๋๋ค๋ ๋ถํธํ ์ ์ด ์์ด ์ด๊ฒ์ ๋ณด์ํ ๊ฒ์ด ํ์ ๊ฐ๋์ด๋ค.
๐ ํ์ ๊ฐ๋ ์ ์
function isDeveloper(target: Developer | Person): target is Developer {
return (target as Developer).skill !== undefined;
}
if (isDeveloper(Tony)) {
console.log(Tony.skill)
} else {
console.log(Tony.age)
ํ์ ๊ฐ๋ ํจ์๋ is๋ผ๋ ํจํด๊ณผ target์ด๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ skill์ด๋ผ๋ ๊ฐ์ด ์์ ๋ !== undefined ํจ์๋ฅผ ์ฌ์ฉํ๋ค. if๋ฌธ์ ํ ๋๊ฐ Developer์ด๋ฉด ์คํฌ์ ์ ๊ณตํด์ค๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ ๋๋ Person์ผ๋ก ์ธ์ํ์ฌ age๋ฅผ ์ ๊ณตํด์ค๋ค. if๋ฌธ ์ฒซ ์ค์๋ developer๊ฐ ํ ๋์ด๊ณ , ๋ฐ์์ค์ Person์ผ๋ก์์ ํ ๋์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ํ์ํ ์์ฑ์ ์ ๊ทผํ ์ ์๋ค.