Front-end/타입스크립트로 블록체인 만들기

[TS] tsconfig.json

탱 'ㅅ' 2024. 1. 4. 18:46

1. typescript 설치

npm i -D typescript


2. package.json 초기화

npm init -y
"scripts": {
	"build": "tsc" // "npx tsc"
}

3. tsconfig.json 설정

에디터는 우리가 TS로 작업한다는 것을 알게 되고, 자동완성기능을 제공한다.


디렉터리에 tsconfig.json 파일이 있으면 해당 디렉터리가 TypeScript 프로젝트의 루트임을 나타냅니다.

tsconfig.json 파일은 프로젝트를 컴파일하는 데 필요한 루트 파일과 컴파일러 옵션을 지정합니다.

include : It tells TS where to look for code to compile

ourDir : It tells TS where to put the output code

target : It specifices the version of JS we want to compile to the to

lib : It specifies what enviornment the code is goin to run on

{
  // VSC가 우리가 TS를 사용한다고 추측
  "include": [ // 우리가 (TS를) JS로 컴파일하고 싶은 모든 디렉터리
    "src" // TS가 src의 모든 파일을 확인한다
  ],
  "compilerOptions": {
    "outDir": "build", // JS 파일이 생성될 디렉터리
    "target": "ES6", // TS가 컴파일할 JS 버전 (ES6 권장-안정적)
    "lib": ["ES6", "DOM"], // 타겟 런타임 환경 -> 자동완성
    "strict": true, // 정의 파일 없는 경우 에러
    "allowJs": true // TS 안에 JS 허용 여부
  }
}
 

Documentation - What is a tsconfig.json

Learn about how a TSConfig works

www.typescriptlang.org


 

target

(기본값: ES3)

최신 브라우저는 모든 ES6 기능을 지원하므로 ES6는 좋은 선택입니다. 코드가 이전 환경에 배포된 경우 더 낮은 target을 설정하거나 최신 환경에서 코드 실행이 보장되는 경우 더 높은 target을 설정하도록 선택할 수 있습니다.
ex) 화살표 함수() => this는 ES5 이하이면 함수 표현식으로 바뀝니다.

특별한 ESNext 값은 TypeScript 버전이 지원하는 가장 높은 버전을 나타냅니다. 이 설정은 다른 TypeScript 버전 간에 동일한 의미가 아니며 업그레이드를 예측하기 어렵게 만들 수 있으므로 주의해서 사용해야 합니다.
https://www.typescriptlang.org/tsconfig#target

"compilerOptions": {
	"target" : "ES6"
}

 

lib

코드가 어떤 환경에서 동작할지 정의하여

걸맞는 API와 타입 등 보다 편리한 자동완성 기능을 제공한다.

 

합쳐진 라이브러리의 정의 파일을 특정해준다

정의 파일: 목표로 하는 target 런타임(실행) 환경을 나타낸다 

 

- DOM

document, window, localStorage, ..

프로그램을 브라우저에서 실행할 것이다

"compilerOptions": {
	"lib" : ["ES6", "DOM"]
}

 

선언 후 TS는 document가 무엇인지 알고 있고

document가 가지고 있는 모든 자동완성(이벤트와 메소드)을 제공한다.

왜냐면 TS는 브라우저의 API와 타입들을 알고있다. 

 

- TS는 Math처럼 내장된 JS API를 위한 기본적인 타입 정의를 가지고 있다

 

 

declaration files (.d.ts)

node module 속 JS 모듈을 TS 코드가 이해할 수 있도록 타입 정의해놓은 파일

"compilerOptions": {
	"strict": true
}

 

 

JSDoc

// @ts-check : .js 파일에서 타입 오류 활성화하기 위해 최상단에 기재

// @ts-ignore | // @ts-expect-error : 특정 줄의 오류 무시  

 

JSDoc 주석을 사용하여 JS 파일에 type을 제공할 수 있음

코멘트일 뿐이라 당장 코드에서 에러나지 않음

"compilerOptions": {
	"allowJs": true
}

 

myPackage.js

// @ts-check
/**
 * Initializes the project
 * @param {object} config 
 * @param {boolean} config.debug
 * @param {string} config.url
 * @returns boolean
 */
export function init(config) {
  return true
}

/**
 * Exits the program 
 * @param {number} code 
 * @returns number
 */
export function exit(code) {
  return code + 1
}

 

index.ts


4. 추가 설치

ts-node : 빌드(사전 컴파일) 없이 실행할 수 있게 해줌 (개발 환경용)

nodemon : 자동으로 커맨드 재실행해주어 서버 재시작하지 않아도 변경된 내용 업데이트해줌

npm i -D ts-node
npm i nodemon
"scripts": {
	"build": "tsc",
	"dev": "nodemon --exec ts-node src/index.ts",
	"start": "node build/index.js"
}

 

5. package에 대한 정의파일

import crypto from "crypto" 

👉error  Module '"crypto"' has no default export.

// 방법1. in index.ts
import * as crypto from "crypto"
// 방법2. in tsconfig.json
"compilerOptions": {
	"esModuleInterop": true,
	"module": "commonJS"
}

 

esModuleInterop : 

CommonJS 모듈을 ES6 모듈 코드베이스로 가져오려고 할 때 발생하는 문제를 해결합니다.
ES6 모듈 사양을 준수하여 CommonJS 모듈을 정상적으로 가져올 수 있게 해줍니다.

 

 

Definitely Typed : 타입 정의를 위한 repository (필요한 정의 파일 참고)

@types/node : nodejs 안에 모든 패키지에 대한 타입 정의

npm i -D @types/node

 

지금은 앞선 ts-node 설치시에 node_modules/@types/node/crypto.d.ts가 자동으로 생성되기 때문에

위에 tsconfig.json에 속성만 추가해주면 import 에러 안 나지만, crypto의 자동완성을 사용하려면 설치해야한다!

 

'Front-end > 타입스크립트로 블록체인 만들기' 카테고리의 다른 글

HW - Class  (0) 2024.01.20
[TS] simple blockchain  (0) 2024.01.08
[TS] Polymorphism + Generic Type + Interface  (1) 2024.01.04
[TS] Interfaces  (1) 2024.01.02
[TS] Classes  (1) 2024.01.02