๋ค์ด๊ฐ๋ฉฐ
TypeScript๋ฅผ ์ฌ์ฉํ๋ค๊ฐ ์์์น ๋ชปํ ๋ชจ๋ ํด์ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ๋ง์ฃผ์น๊ฒ ๋์์ต๋๋ค. .d.ts
ํ์ผ์ ์์น๋ฅผ ๋ณ๊ฒฝํ๋ค๊ฐ ๋ค์ ์๋๋๋ก ๋๋๋ ธ์ ๋, ์ด์ ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ ๊ฐ์๊ธฐ ์ ์์ ์ผ๋ก ๋์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ฐพ์๋ณด๋ ์ด๋ TypeScript์ ๋ชจ๋ ํด์ ์บ์ฑ ๋ฉ์ปค๋์ฆ ๋๋ฌธ์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๋ฒ ํฌ์คํธ์์๋ ์ด ๋ฉ์ปค๋์ฆ์ ๋ํด ์์ธํ ์์๋ณด๊ณ , ์ค์ ๊ฒฝํํ๋ ๋ฌธ์ ์ ํด๊ฒฐ ๊ณผ์ ์ ๊ณต์ ํ๊ฒ ์ต๋๋ค.
๋ชจ๋ ํด์์ด๋?
๋ชจ๋ ํด์(Module Resolution)์ ์ปดํ์ผ๋ฌ๊ฐ import
๊ฐ ๋ฌด์์ ์ฐธ์กฐํ๋์ง ์์๋ด๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋ก์ธ์ค์
๋๋ค. ์๋ฅผ ๋ค์ด:
import { a } from "moduleA";
์ด๋ฐ import ๋ฌธ์์ ์ปดํ์ผ๋ฌ๋ a
์ ๋ชจ๋ ์ฌ์ฉ์ ๊ฒ์ฌํ๊ธฐ ์ํด moduleA
๊ฐ ์ ํํ ๋ฌด์์ ์ฐธ์กฐํ๋์ง ์์์ผ ํฉ๋๋ค.
๋ชจ๋ ํด์ ์ ๋ต
TypeScript๋ ๋ ๊ฐ์ง ๋ชจ๋ ํด์ ์ ๋ต์ ์ ๊ณตํฉ๋๋ค.
- Classic (ํด๋์)
- TypeScript์ ๊ธฐ๋ณธ ํด์ ์ ๋ต
- ์ฃผ๋ก ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ํด ์ ๊ณต๋จ
- ์๋์ import๋ importํ๋ ํ์ผ์ ์๋์ ์ผ๋ก ํด์
- ๋น์๋์ import๋ ๋๋ ํฐ๋ฆฌ ํธ๋ฆฌ๋ฅผ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ฉฐ ํด์
- Node (๋
ธ๋)
- Node.js์ ๋ชจ๋ ํด์ ๋ฉ์ปค๋์ฆ์ ๋ชจ๋ฐฉ
node_modules
๋๋ ํฐ๋ฆฌ์์ ๋ชจ๋์ ์ฐพ์package.json
์main
ํ๋๋ฅผ ํ์ธindex.js
ํ์ผ์ ์ฐพ์
์ค์ ๊ฒฝํํ ๋ฌธ์ ์ํฉ
๋ค์๊ณผ ๊ฐ์ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง TypeScript ํ๋ก์ ํธ๊ฐ ์์์ต๋๋ค.
ํ์ ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์์ ์ด๋ป๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์ฌ์ฉํ๋์ง์ ๋ํ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ ๊ณต๋ถํ๊ธฐ ์ํ ์์ ํ๋ก์ ํธ์์ต๋๋ค.
index.ts
์์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ชจ๋์ ์ํฌํธํ๊ณ ์์์ต๋๋ค (jsDoc ์ ์ถ๊ฐํ์ฌ ์ฌ์ฉํ๋ ค ํ์ต๋๋ค.)
import { init, exit } from "./myPackage";
init({
url: "https://google.com",
debug: true
});
exit(0);
myPackage.js
//@ts-check <- ํ์
์คํฌ๋ฆฝํธ ํ์ผํํ
์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ํ์ธํ๋ผ๊ณ ์๋ฆฌ๋ ์ญํ
// JSDoc : ์ฝ๋ฉํธ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ๋ฒ
// ์ด ํ์ผ์ ์์ฑํ ๋ด์ฉ์ ํ์
์คํฌ๋ฆฝํธ์์ ๋ถ๋ฌ์์ ๋ ํ์ธํ ์ ์์
/**
* Initializes the project
* @param {Object} config
* @param {boolean} config.debug
* @param {string} config.url
* @returns {boolean}
*/
//๋๊ตฐ๊ฐ ๊นํ๊ณผ npm ์ js๋ก ํธ์ํด๋ ๊ฒ์ด๊ณ , ์ฐ๋ฆฌ๊ฐ ์ด๊ฑธ ์ค์นํ๋ค๊ณ ๊ฐ์
export function init(config){
return true;
}
/**
* Exits the project
* @param {number} code
* @returns {number}
*/
export function exit(code){
return code+1;
}
๊ทธ๋ฆฌ๊ณ myPackage.d.ts
๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋์ด ์์์ต๋๋ค (์์ ๋ฐฉ๋ฒ ์๋ ์ , ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๊ณต๋ถํ๊ธฐ ์ํด ๋ง๋ค์ด๋์๋ ํ์ผ์
๋๋ค)
interface Config {
url: string;
debug?: boolean;
}
declare module "myPackage" {
function init(config: Config): boolean;
function exit(code: number): number;
export { init, exit };
}
์ฒ์์๋ myPackage.d.ts
ํ์ผ์ src
๋๋ ํ ๋ฆฌ ๋ฐ์ผ๋ก ์ด๋ํ๋ค๊ฐ ๋ค์ src
๋๋ ํ ๋ฆฌ ์์ผ๋ก ๊ฐ์ ธ์์ ๋, ์ด์ ์๋ ๋ฐ์ํ๋ ํ์
์๋ฌ๊ฐ ๊ฐ์๊ธฐ ์ฌ๋ผ์ง๋ ํ์์ ๊ฒฝํํ์ต๋๋ค.
๋ฌธ์ ์ ์์ธ
์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ด์ ๋ TypeScript์ ๋ชจ๋ ํด์ ์บ์ฑ ๋ฉ์ปค๋์ฆ ๋๋ฌธ์ ๋๋ค:
1. ๋ชจ๋ ํด์ ์บ์ฑ
- TypeScript๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ๋ชจ๋ ํด์ ๊ฒฐ๊ณผ๋ฅผ ์บ์
- ํ๋ฒ ๋ชจ๋์ ์ฑ๊ณต์ ์ผ๋ก ํด์ํ๋ฉด, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์บ์์ ์ ์ฅ
- ์ด ์บ์๋ TypeScript ์๋ฒ๊ฐ ์คํ๋๋ ๋์ ์ ์ง
2. ์บ์ ์ด๊ธฐํ ์กฐ๊ฑด
- TypeScript ์๋ฒ ์ฌ์์
- `tsconfig.json` ๋ณ๊ฒฝ
- ํ๋ก์ ํธ ๊ตฌ์กฐ์ ํฐ ๋ณํ
- IDE ์ฌ์์
3. ํด์ ๊ณผ์
- ์ฒ์์๋ TypeScript๊ฐ `myPackage`๋ฅผ ์ธ๋ถ ํจํค์ง๋ก ์ธ์
- `.d.ts` ํ์ผ์ `src` ๋ฐ์ผ๋ก ์ด๋ํ๋ค๊ฐ ๋ค์ ๊ฐ์ ธ์ค๋ ๊ณผ์ ์์ ์บ์๊ฐ ์ด๊ธฐํ
- ๋ชจ๋ ํด์์ด ์๋ก ์์๋์ด ์๋ ๊ฒฝ๋ก๋ก ์ ํํ๊ฒ ํด์
- ํ๋ฒ ์ฑ๊ณต์ ์ผ๋ก ํด์๋ ํ์๋ ์บ์์ ์ ์ฅ๋์ด ๊ณ์ ์ ์์ ์ผ๋ก ๋์
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ด๋ฌํ ๋ชจ๋ ํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
1. TypeScript ์๋ฒ ์ฌ์์
- IDE์์ TypeScript ์๋ฒ๋ฅผ ์ฌ์์ํ์ฌ ์บ์ ์ด๊ธฐํ
2. tsconfig.json ์ค์ ๋ช ์
{ "compilerOptions": {
"moduleResolution": "node",
"baseUrl": ".",
"paths": {
"myPackage": ["src/myPackage"]
}
} }
3. ๋ชจ๋ ํด์ ์ถ์ ํ์ฑํ
--traceResolution
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํด์ ๊ณผ์ ์ถ์ tsc --traceResolution
๊ฒฐ๋ก
TypeScript์ ๋ชจ๋ ํด์ ์บ์ฑ ๋ฉ์ปค๋์ฆ์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ์ค์ํ ๊ธฐ๋ฅ์ด์ง๋ง, ๋๋ก๋ ์์์น ๋ชปํ ๋์์ ์ผ์ผํฌ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ง์ฃผ์ณค์ ๋๋ ์บ์ ์ด๊ธฐํ๋ฅผ ํตํด ํด๊ฒฐํ ์ ์์ผ๋ฉฐ, ์ฅ๊ธฐ์ ์ผ๋ก๋ tsconfig.json
์ ๋ช
์์ ์ธ ์ค์ ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋๊ธ