
{
"compilerOptions": {
/* Basic Options */
"target": "es6"
"module": "commonjs"
// "lib": [],
...
}
}
lib ์ dom์ผ๋ก ์์
์ ์ํํ๋ ํญ๋ชฉ๋ค, ์ฆ ๊ธฐ๋ณธ ๊ฐ์ฒด/๊ธฐ๋ฅ/ํ์
์คํฌ๋ฆฝํธ ๋
ธ๋๋ฅผ ์ง์ ํ๊ฒ ํด์ฃผ๋ ์ต์
์ด๋ค.<button>Click me</button>
index.html์ <button> ํ๊ทธ๋ฅผ ๋ง๋ค๊ณ app.ts๋ก ์ด๋ํ์ฌ ์๋์ ๊ฐ์ด ์์ฑํด์ค๋ค.const button = document.querySelector("button");
button.addEventListener();
button์ addEventListenr()๋ฅผ ์ถ๊ฐํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ button์ ์ฐพ์๋ธ ๊ฒ ๋ง๋์ง ์ฌ๋ถ๋ฅผ ํ์
์คํฌ๋ฆฝํธ๊ฐ ํ์ ํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.const button = document.querySelector("button")!;
button.addEventListener("click", () => {
console.log("Clicked");
});
โ๐ป ๋๋ํ๋ ๊ธฐ๋ณธ์ ์ผ๋ก button์ด ์กด์ฌํ๊ณ ์์ผ๋ ๊ฐ์ด ๋ฐํ๋ ๊ฒ๋ผ๊ณ ํ์ ์คํฌ๋ฆฝํธ์ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
tsc ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ์ด ์ํ๋๋ค. ํ์
์คํฌ๋ฆฝํธ๋ ์ ํด๋น document๊ฐ unknown ์ด๋ผ๋ ์๋ฌ๋ฅผ ํ์ํ์ง ์๋ ๊ฑธ๊น? ์ด์ ๊ฐ์ document์ const, ๋ณ์ ๋ฑ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ์ด๋ป๊ฒ ํ์
์คํฌ๋ฆฝํธ๋ ์๋ ๊ฑธ๊น? ์ค๋ น document๋ฅผ ์ฌ์ฉํ ์ ์๋ค ํ๋๋ผ๋ querySelector ๋ฉ์๋๊ฐ ์๋ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ค๋ ๊ฒ, button์ด addEventListener๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ๋ ์ด๋ป๊ฒ ์๊ณ ์๋ ๊ฑธ๊น? ํ์
์คํฌ๋ฆฝํธ๋ ์ด๋ป๊ฒ ๋ค ์๋ ๊ฑธ๊น?{
"compilerOptions": {
/* Basic Options */
"target": "es6"
"module": "commonjs"
// "lib": [],
...
}
}
lib ์ต์
๋๋ฌธ์ด๋ค..{
"compilerOptions": {
/* Basic Options */
"target": "es6"
"module": "commonjs"
// "lib": [],
...
}
}
lib ์ค์ ์ด ๋์ด์์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ์ค์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์ target์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. es6๋ก ์ค์ ํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก es6์์ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๊ธฐ๋ฅ์ด ํฌํจ๋๋ค. ์ฆ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅํ es6์ ๊ธฐ๋ฅ๋ค์ ํ์
์คํฌ๋ฆฝํธ์์๋ ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค๋ ๋ป์ด๋ค. ์ด๋ ๋ํ ๋ชจ๋ DOM API๋ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ค๋ค. ๊ฐ๋จํ ๋งํด, lib ์ต์
์ด ์ค์ ๋์ด ์์ง ์์ ๊ฒฝ์ฐ, ์ผ๋ถ ๊ธฐ๋ณธ ์ต์
์ด ์ ์ฉ๋๋๋ฐ ์ด๋ฌํ ๊ธฐ๋ณธ ์ต์
์ ํ์
์คํฌ๋ฆฝํธ๊ฐ ๋ธ๋ผ์ฐ์ ์ ์๋ํ๋ ๋ฐ ํ์ํ ์ฌํญ๋ค์ด๋ฏ๋ก DOM API ๋ฑ์ด ํฌํจ๋๋ ๊ฒ์ด๋ค.{
"compilerOptions": {
/* Basic Options */
"target": "es6"
"module": "commonjs"
"lib": []
...
}
}
lib์ ์ฃผ์์ ํด์ ํ๊ณ ๋ค์ ์ปดํ์ผํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ฃผ์ ์ฒ๋ฆฌ๋ฅผ ํด์ ํ๋ฉด ๊ธฐ๋ณธ ์ค์ ์ด ๋์ด์ ์ ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ lib์ผ๋ก ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจ์์ผ์ผ ํ๋ค. ์ฆ lib ๋ฐฐ์ด์ ์ฌ์ฉํ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ํ์
์ ์๋ค ๋ง์ด๋ค. (๋ค์ ์ฃผ์์ฒ๋ฆฌ๋ฅผ ํ๋ฉด, ํ์
์คํฌ๋ฆฝํธ๊ฐ ๊ธฐ๋ณธ ์ค์ ์ ์ ์ฉํ์ฌ ์๋ํ๋ค.){
"compilerOptions": {
/* Basic Options */
"target": "es6"
"module": "commonjs"
"lib": [
"DOM"
]
...
}
}
lib์ ์ค์ ํด๋๋๋ก ํ๋ค. DOM์ ํ์
์คํฌ๋ฆฝํธ๊ฐ ์ดํดํ ์ ์์ผ๋ฉฐ, ๋ชจ๋ DOM API๋ฅผ ํ์
์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.{
"compilerOptions": {
/* Basic Options */
"target": "es6"
"module": "commonjs"
"lib": [
"DOM",
"ES6",
"DOM.Iterable",
"ScriptHost"
]
...
}
}
ES6 ์ธ๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์
์ ํ๊ณ ์์ผ๋ฏ๋ก ์ ์ญ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ES6 ์ต์
๋ค์ ํ์
์คํฌ๋ฆฝํธ๊ฐ ์ดํดํ ์ ์๋๋ก ES6๋ ์ถ๊ฐํ๋ค. DOM.Iterable ์ ScriptHost ๋ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข๋ค. ์ด ๋๊ฐ์ง๋ฅผ ์ถ๊ฐํ๋ฉด ์์
์ ์ฌ์ฉํ ๋งํ ์๋ฐ์คํฌ๋ฆฝํธ์ ํต์ฌ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋ค๊ฐ์ง ์ต์
๊ฐ์ ์ ํํ๊ฒ ES6๋ก ์ค์ ํ์ ๋์ ์๋ ๊ธฐ๋ณธ ์ค์ ๊ณผ ๊ฐ๋ค.{
"compilerOptions": {
/* Basic Options */
"target": "es6"
"module": "commonjs"
// "lib": [
// "DOM",
// "ES6",
// "DOM.Iterable",
// "ScriptHost"
// ]
...
}
}
ES6์ ๊ธฐ๋ณธ๊ฐ์ด ์๋์ผ๋ก ์ค์ ๋๋ ๊ธฐ๋ณธ ์ค์ ๊ณผ ๋์ผํ๋ค๋ ์๋ฏธ์ด๋ค.{
"compilerOptions": {
/* Basic Options */
"target": "es6"
"module": "commonjs"
"lib": [
"DOM",
"ES6",
"DOM.Iterable",
"ScriptHost"
]
/* Specify library files to be included in the compilation. */,
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
...
}
}
allowJs ์ญ์ ํฅ๋ฏธ๋ก์ด ์ต์
์ด๋ค. allowJs๋ ์ปดํ์ผ์์ checkJS ์ต์
๊ณผ ํจ๊ป ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ํฌํจ์ํฌ ์ ์๋ค. allowJs ์ต์
์ ํ์
์คํฌ๋ฆฝํธ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์ปดํ์ผํ ์ ์๋๋ก ํด์ค๋ค. allowJs๋ฅผ ์ฌ์ฉํ๋ฉด, ํ์ผ์ด .ts๋ก ๋๋์ง ์๋๋ผ๋ ํ์
์คํฌ๋ฆฝํธ๋ ์ปดํ์ผํ ์ ์๋ค. checkJS ์ต์
์ ํ์
์คํฌ๋ฆฝํธ๊ฐ ์ปดํ์ผ์ ์ํํ์ง ์๋๋ผ๋, ๊ตฌ๋ฌธ์ ๊ฒ์ฌํ๊ณ ์ ์ฌ์ ์๋ฌ๋ฅผ '๋ณด๊ณ 'ํด์ฃผ๊ณ , ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ผ๋ถ ๊ธฐ๋ฅ์ ์ฅ์ ์ ์ทจํ๊ณ ์ ํ ๋ ์ ์ฉํ๋ค. ํ์
์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ any ํ์
๋ง ํ์ฉํ๋๋ฐ ์ด ์ต์
๋ค(checkJS, allowJs)๋ฅผ ํ์ฑํํ๋ฉด ๊ทธ์ ๊ฐ์ด ์ค์ ๋๋ค.{
"compilerOptions": {
/* Basic Options */
"target": "es6"
"module": "commonjs"
"lib": [
"DOM",
"ES6",
"DOM.Iterable",
"ScriptHost"
]
/* Specify library files to be included in the compilation. */,
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
...
}
}
{
"compilerOptions": {
/* Basic Options */
"target": "es6"
"module": "commonjs"
"lib": [
"DOM",
"ES6",
"DOM.Iterable",
"ScriptHost"
]
/* Specify library files to be included in the compilation. */,
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
// "declaration": true, /* Generates corresponding '.d.ts' file. */
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
...
}
}
declaration์ declarationMap๋ ์ฃผ์์ฒ๋ฆฌ ํด์ค๋ค.d.ts ํ์ผ์ ํ๋ก์ ํธ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฐฐํฌํ ๋ ์ค์ํ ๊ณ ๊ธ ๊ฐ๋
์ด๋ค. ํ๋ก์ ํธ์ ๋ชจ๋ ํ์
์ ์ค๋ช
ํ๋ manifest ํ์ผ์ด ํ์ํ๋ฐ ๊ทธ๊ฒ์ด ๋ฐ๋ก .d.ts์ด๊ธฐ ๋๋ฌธ์ด๋ค.{
"compilerOptions": {
/* Basic Options */
"target": "es6"
"module": "commonjs"
"lib": [
"DOM",
"ES6",
"DOM.Iterable",
"ScriptHost"
]
/* Specify library files to be included in the compilation. */,
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
// "declaration": true, /* Generates corresponding '.d.ts' file. */
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
// "sourceMap": true, /* Generates corresponding '.map' file. */
...
}
}
sourceMap๋ ๋๋ฒ๊น
์์
๊ณผ ๊ฐ๋ฐ์ ์ ์ฉํ ์ต์
์ด๋ค. ๋ง์ฝ ์ด ์ต์
์ ์ฌ์ฉํ์ง ์๊ณ tsc๋ฅผ ์ฌ์ฉํด์ ๋ชจ๋ ํ์ผ์ ์ปดํ์ผํ๊ณ ๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ธ ์๋ฒ๋ฅผ ์ด์ด์ ๊ฐ๋ฐ์ ๋๊ตฌ์ Sources ํญ์ผ๋ก ์ด๋ํด๋ณด์.
{
"compilerOptions": {
/* Basic Options */
"target": "es6"
"module": "commonjs"
"lib": [
"DOM",
"ES6",
"DOM.Iterable",
"ScriptHost"
]
/* Specify library files to be included in the compilation. */,
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
// "declaration": true, /* Generates corresponding '.d.ts' file. */
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
"sourceMap": true, /* Generates corresponding '.map' file. */
...
}
}
sourceMap ์ต์
์ ์ฃผ์์ ํ๊ณ , ๊ฐ์ ์ฐธtrue๋ก ์ค์ ํ ๋ค tsc ๋ช
๋ น์ด๋ก ์ ์ฒด ํ์ผ์ ์ปดํ์ผ ํด์ฃผ๋ฉด,
js.map ํ์ผ๋ค์ด ์์ฑ๋๋ค. ํ์ผ๋ค์ ์ดํด๋ณด๋ฉด, ์ดํดํ ์ ์๋ ๋ด์ฉ๋ค์ด ๋ค์ด์์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ํ์ผ์ ์
๋ ฅ ํ์ผ์ ์๋ฐ์ผ๋ฆกํธ ํ์ผ์ ์ฐ๊ฒฐํ๋ ์ต์ ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ ๊ฐ์ ๋ค๋ฆฌ ์ญํ ์ ํ๋ค๋ ๊ฑธ ๊ธฐ์ตํ์. ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ด๊ณ ์์คํญ์ผ๋ก ์ด๋ํด๋ณด๋ฉด,
sourceMap ์ต์
์ ๊ธฐ๋ฅ์ ๋๋ฒ๊น
์ ๋จ์ํํด์ฃผ๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ์์ฃผ ์ ์ฉํ๋ค๋ ๊ฒ์ ์์ง ๋ง์.๐จ ํด๋น ํฌ์คํ ์ Udemy์ Typescript :๊ธฐ์ด๋ถํฐ ์ค์ ํ ํ๋ก์ ํธ๊น์ง with React + NodeJS ๊ฐ์๋ฅผ ๋ฒ ์ด์ค๋ก ํ ๊ธฐ๋ก์ ๋๋ค.
โ๐ป ๊ฐ์ git repo ๋ฐ๋ก๊ฐ๊ธฐ