{
"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 ๋ฐ๋ก๊ฐ๊ธฐ