์๋ ์คํ์ผ๋ค๋ ์ ๋ค๋ฆญ ํ์ ๋ณ์นญ์ด๋ค.
//์ฝ๊ธฐ ์ ์ฉ ๋ฐฐ์ด๊ณผ ํํ ๋ง๋๋ ์ฌ๋ฌ๊ฐ์ง ์ ์ธ ๋ฐฉ๋ฒ
type A = readonly string[]; //readonly string[]
type B = ReadonlyArray<string>;//readonly string[]
type C = Readonly<string[]>; //readonly string[]
type D = readonly [number,string]; //readonly [number,string]
type E = Readonly<[number,string]>;//readonly [number,string]
๊ฐ๋จํ ์๋ฅผ ํตํด ํ์ ๋ณ์นญ์์ ์ ๋ค๋ฆญ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ ์์ธํ ์ดํด๋ณด์.
(์ฐธ๊ณ ๋ก ์ด ์์ ์ ์ ts์์ DOM์ ๋ถ๋ฅด๊ธฐ ์ํด
tsconfig.json์ lib ์ต์
ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๋น๋ ๋ ๋ ์ฐธ์กฐํ๋ tsconfig.json์ ์ปดํ์ผ ์ต์ ์ค์ lib์ด๋ผ๋ ํญ๋ชฉ์ด ์๋๋ฐ, ์ต์ํ ์๋ ์คํ์ ๋ง์ถฐ์ฃผ์ด์ผํ๋ค.
// tsconfig.json
//์ฐธ๊ณ : https://norux.me/59
{
"CompilerOptions": {
"target": "es5",
"module": "commonjs",
"lib": [
"dom",
"es5"
]
}
}
click์ด๋ mousedown ๊ฐ์ DOM ์ด๋ฒคํธ๋ฅผ ์ค๋ช ํ๋ MyEvent ํ์ ์ ์ ์
//ํ์
๋ณ์น์์๋ ํ์
๋ณ์นญ๋ช
๊ณผ ํ ๋น๊ธฐํธ(=) ์ฌ์ด์๋ง ์ ๋ค๋ฆญ ํ์
์ ์ ์ธํ ์ ์๋ค
type MyEvent<T> = {
target: T;
type: string;
};
MyEvent์ target ํ๋กํผํฐ๋ <button />, <div /> ๋ฑ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์๋ฅผ ๋ค์ด ๋ฒํผ ์ด๋ฒคํธ๋ ๋ค์์ฒ๋ผ ํํํ ์ ์๋ค.
type ButtonEvent = MyEvent<HTMLButtonElement>;
MyEvent ๊ฐ์ ์ ๋ค๋ฆญ ํ์ ์ ์ฌ์ฉํ ๋๋ ํ์ ์ด ์๋์ผ๋ก ์ถ๋ก ๋์ง ์์ผ๋ฏ๋ก ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ช ์์ ์ ํ์ ํด์ผ ํ๋ค.
let myEvent: MyEvent<HTMLButtonElement | null> = {
target: document.querySelector("#myButton"),
type: "click",
};
MyEvent๋ก TimedEvent ๊ฐ์ ๋ค๋ฅธ ํ์ ์ ๋ง๋ค ์ ์๋ค. ์ด๋ ๊ฒ ์ ์ํ๋ฉด ํ์ ์คํฌ๋ฆฝํธ๋ TimedEvent์ ์ ๋ค๋ฆญ T๋ก ํ์ ํ ๋ ์ด๋ฆ MyEvent์๋ ์ ์ฉํ๋ค.
type TimedEvent<T> = {
event: MyEvent<T>;
from: Date;
to: Date;
};
์ ๋ค๋ฆญ ํ์ ๋ณ์นญ์ ํจ์ ์๊ทธ๋์ฒ์๋ ์ฌ์ฉํ ์ ์๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ๊ตฌ์ฒด ํ์ T๋ก ํ์ ํ๋ฉด์ ๋์์ MyEvent์๋ ์ ์ฉํ๋ค.
function triggerEvent<T>(event: MyEvent<T>): void {
//...
}
triggerEvent({
//T๋ Element|null
target: document.querySelector("#myButton"),
type: "mouseover",
});
์ด์ ์ด๋ค ์ผ์ด ์ผ์ด๋๋๋ฉด...
1. ๊ฐ์ฒด์ triggerEvent๋ฅผ ํธ์ถํ๋ค
2. ํ์ ์คํฌ๋ฆฝํธ๋ ํจ์์ ์๊ทธ๋์ฒ ์ ๋ณด๋ฅผ ์ด์ฉํด ์ ๋ฌํ ์ธ์๊ฐ MyEvent<T> ํ์ ์ด์ด์ผ ํจ์ ํ์ ํ๋ค. ๋ํ MyEvent<T>๋ฅผ
{target: T, type: string }์ผ๋ก ์ ์ํ๋ค๋ ์ฌ์ค๋ ์ธ์งํ๋ค.
3. ํ์ ์คํฌ๋ฆฝํธ๋ ํธ์ถ์๊ฐ ์ ๋ฌํ ๊ฐ์ฒด์ target ํ๋๊ฐ document.querySelector('#myButton')์ด๋ผ๋ ์ฌ์ค์ ํ์ ํ๋ค. ์ฆ, T์ ํ์ ์ document.querySelector('#myButton')์ด๋ฉฐ document.querySelector('#myButton')์ Element | null ํ์ ์ด๋ค. ๋ฐ๋ผ์ T๋ Element | null ํ์ ์ผ๋ก ํ์ ๋๋ค.
4. ํ์ ์คํฌ๋ฆฝํธ๋ ๋ชจ๋ T๋ฅผ Element | null ๋ก ๋์ฒดํ๋ค.
5. ํ์ ์คํฌ๋ฆฝํธ๋ ๋ชจ๋ ํ์ ์ด ํ ๋น์ฑ์ ๋ง์กฑํ๋์ง ํ์ธํ๋ค. ์ด๋ ๊ฒ ํ์ ํ์ธ์ด ์ด๋ฃจ์ด์ง๋ค.
์... DOM ์ฐ๋์ด ์ ์๋จ.
DOM ๋ฅ์ํด์ง๊ณ ๋ค์ ๋์์์ ์๋ํด๋ด์ผ๊ฒ ์
์ถ์ฒ : ํ์ ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ(์ฑ )
์ ์ญ๋ณ์๋ก์์ DOM ์ฐธ์กฐ::JavaScript ๋ ํผ๋ฐ์ค
Writing ์ ์ญ๋ณ์๋ก์์ DOM ์ฐธ์กฐ ๋ค์ด๊ฐ๋ฉฐ Click me window.addEventListener("load", function() { myButton.onclick = () => alert("Clicked"); }); ์์ ๊ฐ์ ์ฝ๋๊ฐ ์ ์ ์๋ํ ๊น? ๋๋๊ฒ๋ ํฌ๋กฌ(Chrome), ํ์ด์ดํญ์ค(Firefox),
www.devdic.com
<!DOCTYPE html>
<html>
<head></head>
<body>
<button type="button" id="myButton">Click me</button>
<script type="text/javascript">
window.addEventListener("load", function() {
myButton.onclick = () => alert("Clicked");
});
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head></head>
<body>
<button type="button" id="myButton">Click me</button>
<script type="text/javascript">
window.addEventListener("load", function() {
var myButton = document.querySelector("#myButton");
myButton.onclick = () => alert("Clicked");
});
</script>
</body>
</html>