LearningTS Chapter 13 - YDP-SPLOUNGE-CLUB/typescript-study GitHub Wiki

13. ꡬ성 μ˜΅μ…˜

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ ꡬ성λ ₯은 당므을 톡해 μ œκ³΅λ˜λŠ” 100개 μ΄μƒμ˜ ν’λΆ€ν•œκ΅¬μ„± μ˜΅μ…˜μ—μ„œλΆ€ν„° λΉ„λ‘―λœλ‹€.

  • tsc 에 μ „λ‹¬λœ λͺ…령쀄 ν”Œλž˜κ·Έ
  • νƒ€μž…μŠ€ν¬λ¦½νŠΈ ꡬ성 파일 TSConfig

13.1 tsc μ˜΅μ…˜

tsc -- help λ₯Ό μ‹€ν–‰ν•΄ 일반적으둜 μ‚¬μš©ν•˜λŠ” CLI ν”Œλž˜κ·Έ λͺ©λ‘μ„ κ°€μ Έμ˜¬ 수 μžˆλ‹€. 전체 ꡬ성 μ˜΅μ…˜ λͺ©λ‘μ€ tsc --all 으둜 확인 κ°€λŠ₯ν•˜λ‹€.

13.1.1 pretty λͺ¨λ“œ

tsc CLIλŠ” 색상과 κ°„κ²©μ˜ μŠ½μΌμ„ μ§€μ •ν•΄ 가독성을 λ†’μ΄λŠ” pretty λͺ¨λ“œλ₯Ό μ§€μ›ν•œλ‹€. 좜λ ₯ 터미널이 μ—¬λŸ¬ 색상 ν…μŠ€νŠΈλ₯Ό μ§€μ›ν•œλ‹€λŠ” 것을 κ°μ§€ν•˜λ©΄ 기본적으둜 pretty λͺ¨λ“œλ‘œ μ„€μ •λœλ‹€.

13.1.2 watch λͺ¨λ“œ

ν•„μžκ°€ tsc CLI μ—μ„œ κ°€μž₯ μ’‹μ•„ν•˜λŠ” 방법은 -w λ‚˜ -watch λͺ¨λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것이닀.

watch λͺ¨λ“œλ₯Ό μ μš©ν•˜λ©΄ μ’…λ£Œν•˜λŠ” λŒ€μ‹  νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό λ¬΄κΈ°ν•œ μ‹€ν–‰ μƒνƒœλ‘œ μœ μ§€ν•˜κ³  λͺ¨λ“  였λ₯˜μ˜ μ‹€μ‹œκ°„ λͺ©λ‘μ„ κ°€μ Έμ™€μ„œ 터미널을 μ§€μ†μ μœΌλ‘œ μ—…λ°μ΄νŠΈν•œλ‹€.

13.2 TSConfig λͺ¨λ“œ

λͺ¨λ“  파일 이름과 ꡬ성 μ˜΅μ…˜μ„ 항상 tsc 에 μ œκ³΅ν•˜λŠ” λŒ€μ‹  λ””λ ‰ν„°λ¦¬μ˜ tsconfig.json νŒŒμΌμ— ꡬ체적으둜 λͺ…μ‹œ κ°€λŠ₯ν•˜λ‹€.

13.2.1 tsc --init

tsc λͺ…λ Ήμ€„μ—λŠ” tsconfig.json νŒŒμΌμ„ μƒμ„±ν•˜κΈ° μœ„ν•œ --init λͺ…령이 ν¬ν•¨λ˜μ–΄μ•Ό ν•œλ‹€.

13.2.2 CLI vs ꡬ성

tsc --init 에 따라 μƒμ„±λœ TSConfig νŒŒμΌμ„ μ‚΄νŽ΄λ³΄λ©΄ ν•΄λ‹Ή 파일의 ꡬ성 μ˜΅μ…˜μ΄ "compilerOptions" 객체 내에 μžˆλ‹€. CLI 와 tsconfig νŒŒμΌμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•œ λŒ€λΆ€λΆ„μ˜ μ˜΅μ…˜μ€ λ‹€μŒ 두 κ°€μ§€ λ²”μ£Ό 쀑 ν•˜λ‚˜λ‘œ λΆ„λ₯˜λœλ‹€.

  • 컴파일러: ν¬ν•¨λœ 각 파일이 νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— 따라 μ»΄νŒŒμΌλ˜κ±°λ‚˜ νƒ€μž…μ„ ν™•μΈν•˜λŠ” 방법
  • 파일: νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ 싀행될 파일과 μ‹€ν–‰λ˜μ§€ μ•Šμ€ 파일

13.3 파일 포함

기본적으둜 tsc λŠ” ν˜„μž¬ 디렉터리와 ν•˜μœ„ 디렉터리에 μžˆλŠ” μˆ¨κ²¨μ§€μ§€ μ•Šμ€ λͺ¨λ“  .ts νŒŒμΌμ—μ„œ μ‹€ν–‰λ˜κ³  μˆ¨κ²¨μ§„ 디렉터리와 node_modules λŠ” λ¬΄μ‹œν•œλ‹€.

13.3.1 includes

νŒŒμΌμ„ ν¬ν•¨ν•˜λŠ” κ°€μž₯ ν”ν•œ λ°©λ²•μœΌλ‘œ tsconfig.json 의 μ΅œμƒμœ„ "includes" 속성을 μ‚¬μš©ν•œλ‹€.

예λ₯Ό λ“€μ–΄ λ‹€μŒ ꡬ성 νŒŒμΌμ€ tsconfig.json κ³Ό κ΄€λ ¨λœ src/ 디렉터리 μ•ˆμ˜ λͺ¨λ“  νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ†ŒμŠ€ νŒŒμΌμ„ μž¬κ·€μ μœΌλ‘œ ν¬ν•¨ν•œλ‹€.

13.4 λŒ€μ²΄ ν™•μž₯자

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” 기본적으둜 ν™•μž₯μžκ°€ .ts 의 λͺ¨λ“  νŒŒμΌμ„ 읽을 수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ 일뢀 ν”„λ‘œμ νŠΈλŠ” JSON λͺ¨λ“ˆ λ˜λŠ” λ¦¬μ—‘νŠΈμ™€ 같은 UI 라이브러리λ₯Ό μœ„ν•œ JSX ꡬ문처럼 ν™•μž₯μžκ°€ λ‹€λ₯Έ νŒŒμΌμ„ 읽을 수 μžˆμ–΄μ•Ό ν•œλ‹€.

13.4.1 JSX ꡬ문

같은 JSX ꡬ문은 λ¦¬μ—‘νŠΈ 같은 UI λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ 자주 μ‚¬μš©ν•œλ‹€. JSX ꡬ문은 μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μ•„λ‹ˆλ‹€. νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ νƒ€μž… μ •μ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ μ»΄νŒŒμΌλ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ ꡬ문의 ν™•μž₯이닀.

νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ .tsx νŒŒμΌμ— λŒ€ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό λ‚΄λ³΄λ‚΄λŠ” 방법은 "jsx" 컴파일러 μ˜΅μ…˜μ— μ‚¬μš©λ˜λŠ” κ°’μœΌλ‘œ κ²°μ •λœλ‹€. ν”„λ‘œμ νŠΈλŠ” [ν‘œ 13-1]에 μžˆλŠ” μ„Έ κ°€μ§€ κ°’ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•œλ‹€.

κ°’ μž…λ ₯ μ½”λ“œ 좜λ ₯ μ½”λ“œ 좜λ ₯ 파일 ν™•μž₯자
preserve
.jsx
react
React.createElement("div") .js
react-native
.js
{
  "compilerOptions" : {
    "jsx": "reserve"
  }
}

바벨과 같은 λ³„λ„μ˜ λ„κ΅¬λ‘œ μ½”λ“œλ₯Ό λ³€ν™˜ν•˜λŠ” κ²ƒμ²˜λŸΌ νƒ€μž…μŠ€ν¬λ¦½γ…Œμ˜ λ‚΄μž₯된 트랜슀파일러λ₯Ό μ§μ ‘μ μœΌλ‘œ μ‚¬μš©ν•˜μ§€ μ•Šμ„ κ²½μš°μ—λŠ” jsx 에 λŒ€ν•΄ ν—ˆμš©λœ 값을 μ‚¬μš©ν•  수 μžˆλ‹€. Next.js λ˜λŠ” 리믹슀 와 같은 μ΅œμ‹  ν”„λ ˆμž„μ›Œν¬λ‘œ κ΅¬μΆ•λœ λŒ€λΆ€λΆ„μ˜ μ›Ή 앱은 λ¦¬μ—‘νŠΈ ꡬ성 및 컴파일 ꡬ문을 μ²˜λ¦¬ν•œλ‹€. μ΄λŸ¬ν•œ ν”„λ ˆμž„μ›Œν¬ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜λ©΄ νƒ€μž…μŠ€ν¬λ¦½νŠΈ λ‚΄μž₯ 트랜슀파일러λ₯Ό 직접 ꡬ성할 ν•„μš”κ°€ μ—†λ‹€.

.tsx 파일의 μ œλ„€λ¦­ ν™”μ‚΄ν‘œ ν•¨μˆ˜

μ œλ„€λ¦­ ν™”μ‚΄ν‘œ ν•¨μˆ˜ ꡬ문이 JSX ꡬ문과 μΆ©λŒν•œλ‹€. .tsx νŒŒμΌμ—μ„œ ν™”μ‚΄ν‘œ ν•¨μˆ˜μ— λŒ€ν•œ νƒ€μž… 인수 λ₯Ό μž‘μ„±ν•˜λ €κ³  ν•˜λ©΄ T μš”μ†Œμ˜ μ‹œμž‘ νƒœκ·Έμ— λŒ€ν•œ μ’…λ£Œ νƒœκ·Έκ°€ μ—†κΈ° λ•Œλ¬Έμ— 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

const identity = <T>(input: T) => input; // Error

<T = unknown> μ΄λΌλŠ” ꡬ문을 μΆ”κ°€ν•΄ ν•΄κ²° κ°€λŠ₯ν•˜λ‹€.

13.4.2 resolveJsonModule

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” resolveJsonModule 컴퍼일러 μ˜΅μ…˜μ„ true λ‘œμ„€μ •ν•˜λ©΄ json νŒŒμΌμ„ 읽을 수 μžˆλ‹€.

json νŒŒμΌμ„ 마치 객체λ₯Ό λ‚΄λ³΄λ‚΄λŠ” .ts 파일인 κ²ƒμ²˜λŸΌ κ°€μ Έμ˜€κ³  ν•΄λ‹Ή 객체의 νƒ€μž…μ„ const λ³€μˆ˜μΈ κ²ƒμ²˜λŸΌ μœ μΆ”ν•œλ‹€.

{
  "activist": "Mary";
}
import { activist } from "./activist.json";

console.log(activist); // Ok Logs Mary

esModuleInterop 컴파일러 μ˜΅μ…˜μ΄ ν™œμ„±ν™”λœ κ²½μš°μ—λ„ κΈ°λ³Έ κ°€μ Έμ˜€κΈ°λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

import data from "./activist.json";

array λ˜λŠ” number 같은 λ¦¬ν„°λŸ΄ νƒ€μž…μ„ ν¬ν•¨ν•œ JSON 파일이라면 import ꡬ문으둜 * 을 μ‚¬μš©ν•œλ‹€.

13.5 μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ 내보내기

13.5.1 outDir

기본적으둜 νƒ€μž…μŠ€ν¬λ¦½νŠΈ 좜λ ₯ νŒŒμΌμ„ ν•΄λ‹Ή μ†ŒμŠ€ 파일과 λ™μΌν•œ μœ„μΉ˜μ— μƒμ„±ν•œλ‹€.

κ²½μš°μ— 따라 좜λ ₯ νŒŒμΌμ„ λ‹€λ₯Έ 폴더에 μƒμ„±ν•˜λŠ” 것이 더 λ‚˜μ„ 수 μžˆλ‹€.

outDir 컴파일러 μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λ©΄ 좜λ ₯ 파일의 루트 디렉터리λ₯Ό λ‹€λ₯΄κ²Œ μ§€μ • κ°€λŠ₯ν•˜λ‹€.

13.5.2 target

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” ES3 κ³Ό 같은 였래된 ν™˜κ²½μ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 좜λ ₯ νŒŒμΌμ„ 생성 κ°€λŠ₯ν•˜λ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ ꡬ문을 μ§€μ›ν•˜κΈ° μœ„ν•΄ μ–΄λŠ λ²„μ „κΉŒμ§€ λ³€ν™˜ν•΄μ•Ό ν•˜λŠ”μ§€λ₯Ό μ§€μ •ν•˜λŠ” target 컴파일러 μ˜΅μ…˜μ„ μ œκ³΅ν•˜λ©°

μ§€μ •ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ "es3" κ°€ 기본적으둜 μ§€μ •λœλ‹€.

tsc --init 은 기본적으둜 es2016 을 μ§€μ •ν•˜λ„λ‘ μ„€μ •λ˜μ–΄ μžˆμ§€λ§Œ λŒ€μƒ ν”Œλž«νΌμ— 따라 κ°€λŠ₯ν•œ ν•œ μ΅œμ‹  μžλ°”μŠ€ν¬λ¦½νŠΈ ꡬ문을 μ‚¬μš©ν•˜λŠ”κ²ƒμ΄ μ’‹λ‹€.

13.5.3 내보내기 μ„ μ–Έ

.d.ts μ„ μ–Έ νŒŒμΌμ„ νŒ¨ν‚€μ§€λ‘œ 배포해 μ‚¬μš©ν•˜λŠ” κ³³μ—μ„œ μ½”λ“œ νƒ€μž…μ„ ν‘œμ‹œν•˜λŠ” 방법을 μ†Œκ°œν–ˆλ‹€.

λŒ€λΆ€λΆ„μ˜ νŒ¨ν‚€μ§€λŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ declaration 컴파일러 μ˜΅μ…˜μ„ μ‚¬μš©ν•΄ μ†ŒμŠ€ νŒŒμΌμ—μ„œ .d.ts 좜λ ₯ νŒŒμΌμ„ 내보낸닀.

{
  "compilerOptions": {
    "declaration": true
  }
}

.d.ts 좜λ ₯ νŒŒμΌμ€ outDir μ˜΅μ…˜μ— 따라 .js 파일과 λ™μΌν•œ 좜λ ₯ κ·œμΉ™μ„ 따라 내보내진닀.

emitDeclarationOnly

declaration 컴파일러 μ˜΅μ…˜μ— λŒ€ν•œ νŠΉλ³„ν•œ μΆ”κ°€λ‘œ νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ .js 와 .jsx 파일 없이 μ„ μ–Έ 파일만 내보내도둝 μ§€μ‹œν•˜λŠ” emitDeclarationOnly 컴파일러 μ˜΅μ…˜μ΄ μžˆλ‹€.

13.5.4 μ†ŒμŠ€ λ§΅

μ†ŒμŠ€ 맡은 좜λ ₯ 파일의 λ‚΄μš©μ΄ 원본 μ†ŒμŠ€ 파일과 μ–΄λ–»κ²Œ μΌμΉ˜ν•˜λŠ”μ§€μ— λŒ€ν•œ μ„€λͺ…이닀.

μ†ŒμŠ€λ§΅μ€ 좜λ ₯ νŒŒμΌμ„ 탐색할 λ•Œ 디버거 같은 개발자 λ„κ΅¬μ—μ„œ 원본 μ†ŒμŠ€ μ½”λ“œλ₯Ό ν‘œμ‹œν•˜λ„λ‘ μ„€μ •ν•œλ‹€.

sourceMap

νƒ€μž…μŠ€ν¬λ¦½νŠΈ sourceMap 컴파일러 μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λ©΄ .js λ˜λŠ” .jsx 좜λ ₯ 파일과 ν•¨κ»˜

js.map, jsx.map μ†ŒμŠ€ 맡을 좜λ ₯ κ°€λŠ₯ν•˜λ‹€.

declarationMap

.d.ts μ„ μ–Έ νŒŒμΌμ— λŒ€ν•œ μ†ŒμŠ€ 맡을 생성할 μˆ˜λ„ μžˆλ‹€. declarationMap 컴파일러 μ˜΅μ…˜μ€ 원본 μ†ŒμŠ€ νŒŒμΌμ— ν•΄λ‹Ήν•˜λŠ” 각 .d.ts 에 λŒ€ν•œ .d.ts.map μ†ŒμŠ€ 맡을 μƒμ„±ν•˜λ„λ‘ μ§€μ‹œν•œλ‹€.

13.5.5 noEmit

λ‹€λ₯Έ 도ꡬλ₯Ό μ΄μš©ν•΄ μ†ŒμŠ€ νŒŒμΌμ„ μ»΄νŒŒμΌν•˜κ³  μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œμ νŠΈμ—μ„œ νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” 파일 생성을 λͺ¨λ‘ κ±΄λ„ˆλ›°λ„λ‘ μ§€μ‹œ κ°€λŠ₯ν•˜λ‹€.

noEmit 컴파일러 μ˜΅μ…˜μ„ ν™œμ„±ν™” ν•˜λ©΄ νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ μ˜¨μ „νžˆ νƒ€μž… κ²€μ‚¬κΈ°λ‘œλ§Œ μž‘λ™ν•œλ‹€.

13.6 νƒ€μž… 검사

λŒ€λΆ€λΆ„μ˜ νƒ€μž…μŠ€ν¬λ¦½νŠΈ ꡬ성 μ˜΅μ…˜μ€ νƒ€μž… 검사기λ₯Ό μ œμ–΄ν•œλ‹€. ꡬ성 μ˜΅μ…˜μ„ λŠμŠ¨ν•˜κ²Œ ꡬ성해 였λ₯˜κ°€ μ™„μ „νžˆ ν™•μ‹€ν•  λ•Œλ§Œ νƒ€μž… 검사 였λ₯˜λ₯Ό λ³΄κ³ ν•˜λ„λ‘ ν•˜κ±°λ‚˜ ꡬ성 μ˜΅μ…˜μ„ μ—„κ²©ν•˜κ²Œ ꢁ성해 거의 λͺ¨λ“  μ½”λ“œλ₯Ό μ˜¬λ°”λ₯΄κ²Œ 잘 μž…λ ₯ν•˜λ„λ‘ μš”κ΅¬ν•  수 μžˆλ‹€.

13.6.1 lib

λ¨Όμ € νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ λŸ°νƒ€μž„ ν™˜κ²½μ— μžˆλ‹€κ³  κ°€μ •ν•˜λŠ” μ „μ—­ API λŠ” lib 컴파일러 μ˜΅μ…˜μœΌλ‘œ ꡬ성할 수 μžˆλ‹€.

{
  "compilerOptions": {
    "lib": ["es2020"]
  }
}

13.6.2 skipLibCheck

μ€‘μš”

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μ†ŒμŠ€ μ½”λ“œμ— λͺ…μ‹œμ μœΌλ‘œ ν¬ν•¨λ˜μ§€ μ•Šμ€ μ„ μ–Έ νŒŒμΌμ—μ„œ νƒ€μž… 검사λ₯Ό κ±΄λ„ˆλ›°λ„λ‘ ν•˜λŠ” skipLibCheck 컴파일러 μ˜΅μ…˜μ„ μ œκ³΅ν•œλ‹€.

skipLibCheck λŠ” νƒ€μž… 검사 일뢀λ₯Ό κ±΄λ„ˆλ›°λŠ” μž‘μ—…μœΌλ‘œ νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ„±λŠ₯을 κ°œμ„ ν•œλ‹€.

13.6.3 엄격 λͺ¨λ“œ

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ νƒ€μž… 검사 컴파일러 μ˜΅μ…˜ λŒ€λΆ€λΆ„μ€ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ 엄격 λͺ¨λ“œλ‘œ κ·Έλ£Ήν™” λœλ‹€. μ—„κ²©ν•œ 컴파일러 μ˜΅μ…˜μ€ 기본적으둜 false 이며 ν™œμ„±ν™” 되면 νƒ€μž… 검사기에 일뢀 좔가적인 검사λ₯Ό μΌœλ„λ‘ μ§€μ‹œν•œλ‹€.

νŠΉμ • 검사λ₯Ό μ œμ™Έν•œ λͺ¨λ“  엄격 λͺ¨λ“œ 검사λ₯Ό ν™œμ„±ν™”ν•˜κ³  μ‹Άλ‹€λ©΄ strict λ₯Ό ν™œμ„±ν™”ν•˜κ³  νŠΉμ • 검사λ₯Ό λͺ…μ‹œμ μœΌλ‘œ λΉ„ν™œμ„±ν™” κ°€λŠ₯ν•˜λ‹€.

noImplicitAny

νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ λ§€κ°œλ³€μˆ˜ λ˜λŠ” μ†μ„±μ˜ νƒ€μž…μ„ μœ μΆ”ν•  수 μ—†λŠ” 경우라면 any νƒ€μž…μœΌλ‘œ κ°€μ •ν•œλ‹€. any νƒ€μž…μ€ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ νƒ€μž… 검사λ₯Ό λŒ€λΆ€λΆ„ μš°νšŒν•  수 μžˆμœΌλ―€λ‘œ μ½”λ“œμ—μ„œ μ΄λŸ¬ν•œ μ•”μ‹œμ  νƒ€μž…μ„ ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€.

noImplicitAny 컴파일러 μ˜΅μ…˜μ€ μ•”μ‹œμ  any 둜 λŒ€μ²΄λ  λ•Œ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— νƒ€μž… 검사 였λ₯˜κ°€ λ°œμƒν•˜λ„λ‘ μ§€μ‹œν•œλ‹€.

const logMEssage = (message) => {
  // Error Parameter 'message' implicit has an any type
  console.log(`message: ${message}`)
}

strictBindCallApply

νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ 처음 μΆœμ‹œλ˜μ—ˆμ„ λ–„ λ‚΄μž₯된 Function.apply , bind, call ν•¨μˆ˜ μœ ν‹Έλ¦¬ν‹°λ₯Ό λ‚˜νƒ€λ‚Ό 수 μžˆμ„ 만큼 μΆ©λΆ„ν•œ νƒ€μž… μ‹œμŠ€ν…œμ΄ μ—†μ—ˆλ‹€. 기본적으둜 이런 ν•¨μˆ˜λŠ” ν•¨μˆ˜μ˜ 인수 λͺ©λ‘μ— λŒ€ν•΄ any λ₯Ό μ‚¬μš©ν•΄μ•Ό ν–ˆκ³  νƒ€μž… μ•ˆμ •μ„±κ³ΌλŠ” 맀우 거리가 λ©€μ—ˆλ‹€.

strictBindCallApplyλ₯Ό ν™œμ„±ν™” ν•˜λ©΄ ν•¨μˆ˜ λ³€ν˜•μ— λŒ€ν•΄ 훨씬 더 μ •ν™•ν•œ νƒ€μž…μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

strictFunctionTypes

strictFunctionTypes 컴파일러 μ˜΅μ…˜μ€ ν•¨μˆ˜ λ§€κ°œλ³€μˆ˜ νƒ€μž…μ„ μ•½κ°„ 더 μ—„κ²©ν•˜κ²Œ κ²€μ‚¬ν•œλ‹€.

λ§€κ°œλ³€μˆ˜κ°€ λ‹€λ₯Έ νƒ€μž…μ˜ λ§€κ°œλ³€μˆ˜ ν•˜μœ„ νƒ€μž…μΈ 경우 ν•¨μˆ˜ νƒ€μž…μ€ 더 이상 λ‹€λ₯Έ ν•¨μˆ˜ νƒ€μž…μ— ν• λ‹Ή κ°€λŠ₯ν•œ κ²ƒμœΌλ‘œ κ°„μ£Όλ˜μ§€ μ•ŠλŠ”λ‹€.

strictNullChecks

null κ³Ό undefined 같은 λΉ„μ–΄ μžˆλŠ” νƒ€μž…μ„ λΉ„μ–΄ μžˆμ§€ μ•Šμ€ 탕비에 ν• λ‹Ήν•˜λ„λ‘ ν—ˆμš©ν•˜λŠ” μ–Έμ–΄μ˜ μ‹­μ–΅ λ‹¬λŸ¬μ˜ μ‹€μˆ˜μ— λŒ€ν•΄ μ΄μ•ΌκΈ°ν–ˆλ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ strictNullChecks ν”Œλž˜κ·Έλ₯Ό λΉ„ν™œμ„±ν™” ν•˜λ©΄ μ½”λ“œμ˜ λͺ¨λ“  νƒ€μž…μ— null | undefined κ°€ μΆ”κ°€λ˜κ³  λͺ¨λ“  λ³€μˆ˜κ°€ null λ˜λŠ” undefined λ₯Ό 받을 수 μžˆλ„λ‘ ν—ˆμš©ν•œλ‹€.

strictPropertyInitialization

클래슀의 각 속성이 클래슀 μƒμ„±μžμ— ν™•μ‹€ν•˜κ²Œ ν• λ‹Ήλ˜μ—ˆλŠ”μ§€λ₯Ό ν™•μΈν•˜λŠ” 클래슀의 μ—„γ„±κ²¨ν•œ μ΄ˆκΈ°ν™” 검사λ₯Ό 이야기 ν—€μ—ˆλ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ strictPropertyInitialization ν”Œλž˜κ·ΈλŠ” μ΄ˆκΈ°ν™”κ°€ μ—†κ³  μƒμ„±μžμ— ν™•μ‹€ν•˜κ²Œ ν• λ‹Ήλ˜μ§€ μ•Šμ€ 클래슀 μ†μ„±μ—μ„œ νƒ€μž… 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¨λ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ²” μ‚¬λ‘€λŠ” strictPropertyInitialization λ₯Ό ν™œμ„±ν™” μ‹œν‚€λŠ” 것이닀.

useUnknownInCatchVariables

λͺ¨λ“  μ–Έμ–΄μ—μ„œ 였λ₯˜ μ²˜λ¦¬λŠ” 본질적으둜 μ•ˆμ „ν•˜μ§€ μ•Šμ€ κ°œλ…μ΄λ‹€. 이둠적으둜 λͺ¨λ“  ν•¨μˆ˜λŠ” μ‚¬μš©μžκ°€ μž‘μ„±ν•œ throw λ¬Έμ΄λ‚˜ undefined 속성을 μ½λŠ” 것과 같은 극단적인 κ²½μš°μ— μ—¬λŸ¬ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¨λ‹€.

useUnknownInCatchVariables λŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ κΈ°λ³Έ catch 절 error νƒ€μž…μ„ unknown 으둜 λ³€κ²½ν•œλ‹€.

13.7 λͺ¨λ“ˆ

AMD, CommonJS, ECMAScript λ“± λͺ¨λ“ˆ λ‚΄μš©μ„ 내보내고 κ°€μ Έμ˜€κΈ° μœ„ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ‹€μ–‘ν•œ μ‹œμŠ€ν…œμ€ μ΅œμ‹  ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ κ°€μž₯ λ³΅μž‘ν•œ λͺ¨λ“ˆ μ‹œμŠ€ν…œμ΄λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 파일이 μ„œλ‘œμ˜ μ½˜ν…μΈ λ₯Ό κ°€μ Έμ˜€λŠ” 방식이 μ›ΉνŽ™κ³Ό 같은 μ‚¬μš©μž μž‘μ„± ν”„λ ˆμž„μ›Œν¬μ— 따라 κ΅¬λ™λ˜λŠ” κ²½μš°κ°€ λ§Žλ‹€λŠ” μ μ—μ„œ

μƒλŒ€μ μœΌλ‘œ νŠΉμ΄ν•˜λ‹€. νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” κ°€μž₯ 합리적인 μ‚¬μš©μž μ˜μ—­ λͺ¨λ“ˆμ„ ꡬ성을 λ‚˜νƒ€λ‚΄λŠ” ꡬ성 μ˜΅μ…˜μ„ μ œκ³΅ν•˜κΈ° μœ„ν•΄ μ΅œμ„ μ„ λ‹€ν•œλ‹€.

13.7.1 module

μ–΄λ–€ λͺ¨λ“ˆ μ‹œμŠ€ν…œμœΌλ‘œ λ³€ν™˜λœ μ½”λ“œλ₯Ό μ‚¬μš©ν• μ§€ κ²°μ •ν•˜κΈ° μœ„ν•΄ module 컴파일 μ˜΅μ…˜μ„ μ œκ³΅ν•œλ‹€. ECMA 슀크립트 λͺ¨λ“ˆλ‘œ μ†ŒμŠ€ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” module 값에 따라 export 와 import 문을 λ‹€λ₯Έ λͺ¨λ“ˆ μ‹œμŠ€ν…œμœΌλ‘œ λ³€ν™˜ν•  수 μžˆλ‹€.

target 컴파일러 μ˜΅μ…˜μ΄ es3, es5 인 경우 module 컴파일러 μ˜΅μ…˜μ˜ 기본값은 commonjs κ°€ λœλ‹€.

κ·Έλ ‡μ§€ μ•Šκ³  ECMAScript 슀크립트 λͺ¨λ“ˆλ‘œ 좜λ ₯ν•˜λ„λ‘ μ§€μ •ν•˜κΈ° μœ„ν•΄ module 컴파일러 μ˜΅μ…˜μ€ es2015 둜 κΈ°λ³Έ μ„€μ •λœλ‹€.

13.7.3 CommonJS μ™€μ˜ μƒν˜Έ μš΄μš©μ„±

μžλ°”μŠ€ν¬λ¦½νŠΈ λͺ¨λ“ˆλ‘œ μž‘μ—…ν•  λ–„ λͺ¨λ“ˆμ˜ κΈ°λ³Έ 내보내기와 λ„€μž„μŠ€νŽ˜μ΄μŠ€ 좜λ ₯ κ°„μ—λŠ” 차이점이 μžˆλ‹€. λͺ¨λ“ˆμ˜ κΈ°λ³Έ λ‚΄λ³΄λ‚΄κΈ°λŠ” 내보낸 객체의 .default 속성이닀.

λͺ¨λ“ˆμ˜ λ„€μž„μŠ€νŽ˜μ΄μŠ€ λ‚΄λ³΄λ‚΄κΈ°λŠ” 내보낸 객체 μžμ²΄μ΄λ‹€.

ꡬ문 μ˜μ—­ CommonJS ECMAScript
κΈ°λ³Έ 내보내기 export.exports.default = value; export default value;
κΈ°λ³Έ κ°€μ Έμ˜€κΈ° const { default: value } = require("...") import value from "...";
λ„€μž„μŠ€νŽ˜μ΄μŠ€ 내보내기 module.export = value 지원 μ•ˆν•¨
λ„€μž„μŠ€νŽ˜μ΄μŠ€ κ°€μ Έμ˜€κΈ° const value = require("...") import * as value from "...";

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ νƒ€μž… μ‹œμŠ€ν…œμ€ ECMAScript λͺ¨λ“ˆ μΈ‘λ©΄μ—μ„œ 파일 κ°€μ Έμ˜€κΈ°μ™€ 내보내기에 λŒ€ν•œ ν•©μ˜λ₯Ό λ§Œλ“ λ‹€.

λŒ€λΆ€λΆ„μ˜ ν”„λ‘œμ νŠΈμ²˜λŸΌ npm νŒ¨ν‚€μ§€μ— μ˜μ‘΄ν•˜λŠ” 경우 μ˜μ‘΄μ„± 쀑 μΌλΆ€λŠ” μ—¬μ „νžˆ CommonJS λͺ¨λ“ˆλ‘œ λ°°ν¬λœλ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” λͺ¨λ“ˆ ν˜•μ‹ κ°„μ˜ μƒν˜Έ μš΄μš©μ„±μ„ κ°œμ„ ν•˜λŠ” λͺ‡ κ°€μ§€ 컴파일러 μ˜΅μ…˜μ„ μ œκ³΅ν•œλ‹€.

esModuleInterop

esModuleInterop ꡬ성 μ˜΅μ…˜μ€ module 이 es2015 λ˜λŠ” esnext 와 같은 ECMAScript λͺ¨λ“ˆ ν˜•μ‹μ΄ μ•„λ‹Œ 경우 νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œ 내보낸 μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œμ— μ†ŒλŸ‰μ˜ λ‘œμ§μ„ μΆ”κ°€ν•œλ‹€. ν•΄λ‹Ή λ‘œμ§μ€ ECMAScript λͺ¨λ“ˆμ΄ κΈ°λ³Έ λ˜λŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€ κ°€μ Έμ˜€κΈ°μ— λŒ€ν•œ ECMAScript λͺ¨λ“ˆμ˜ κ·œμΉ™μ„ μ€€μˆ˜ν•˜μ§€ μ•ŠλŠ” κ²½μš°μ—λ„ λͺ¨λ“ˆμ—μ„œ κ°€μ Έμ˜¬ 수 μžˆλ„λ‘ ν•œλ‹€.

esModuleInterop λ₯Ό ν™œμ„±ν™” ν•˜λŠ” 이유 쀑 ν•˜λ‚˜λŠ” κΈ°λ³Έ 내보내기λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ” react 같은 νŒ¨ν‚€μ§€λ₯Ό μœ„ν•΄μ„œμ΄λ‹€.

react νŒ¨ν‚€μ§€μ— κΈ°λ³Έ κ°€μ Έμ˜€κΈ°λ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•˜λ©΄ νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ”e sModuleInterop 이 ν™œμ„±ν™” λ˜μ§€ μ•Šμ€ 것에 λŒ€ν•œ νƒ€μž… 였λ₯˜λ₯Ό λ³΄κ³ ν•œλ‹€.

allowSyntheticDefaultImports

allowSyntheticDefaultImports 컴파일러 μ˜΅μ…˜μ€ ECMAScript λͺ¨λ“ˆμ΄ ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” CommonJS λ„€μž„μŠ€νŽ˜μ΄μŠ€ 내보내기 νŒŒμΌμ—μ„œ κΈ°λ³Έ κ°€μ Έμ˜€κΈ°λ₯Ό ν•  수 μžˆμŒμ„ νƒ€μž… μ‹œμŠ€ν…œμ— μ•Œλ¦°λ‹€.

allowSyntheticDefaultImports 컴파일러 μ˜΅μ…˜μ€ λ‹€μŒ 쀑 ν•˜λ‚˜κ°€ true 인 κ²½μš°μ—λ§Œ true 둜 기본적으둜 μ„€μ •λœλ‹€.

  • module 이 system 일 경우
  • esModuleInterop 이 true 이고 module 이 es2015 λ˜λŠ” esnext 와 같은 ECMAScript λͺ¨λ“ˆ ν˜•μ‹μ΄ 아닐 경우

13.7.4 isolatedModules

ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ νŒŒμΌμ—μ„œλ§Œ μž‘λ™ν•˜λŠ” 바벨과 같은 μ™ΈλΆ€ νŠΈλžœμŠ€νŒŒμΌλŸ¬λŠ” νƒ€μž… μ‹œμŠ€ν…œ 정보λ₯Ό μ‚¬μš©ν•΄ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό 내보낼 수 μ—†λ‹€. 결과적으둜 νƒ€μž… 정보에 μ˜μ‘΄ν•˜λ©° μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό λ‚΄λ³΄λ‚΄λŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ ꡬ문 κΈ°λŠ₯은 바벨 같은 νŠΈλžœμŠ€νŒŒμΌλŸ¬μ—μ„œλŠ” μ§€μ›λ˜μ§€ μ•ŠλŠ”λ‹€.

  • const μ—΄κ±°ν˜•
  • 슀크립트 파일
  • 독립 μ‹€ν–‰ν˜• νƒ€μž… 내보내기

ν”„λ‘œμ νŠΈμ—μ„œ νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ μ•„λ‹Œ λ‹€λ₯Έ 도ꡬλ₯Ό μ‚¬μš©ν•΄ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ λ³€ν™˜ν•˜λŠ” κ²½μš°μ—λŠ” isolatedModules λ₯Ό ν™œμ„±ν™”ν•˜λŠ” 것이 μ’‹λ‹€.

13.8 μžλ°”μŠ€ν¬λ¦½νŠΈ

13.8.1 allowJS

allowJS 컴파일러 μ˜΅μ…˜μ€ μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ— μ„ μ–Έλœ ꡬ문을 νƒ€μž…μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ—μ„œ νƒ€μž… 검사λ₯Ό ν•˜λ„λ‘ ν—ˆμš©ν•œλ‹€.

allowJSκ°€ ν™œμ„±ν™”λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©΄ import 문은 μ•Œλ €μ§„ νƒ€μž…μ„ κ°–μ§€ λͺ»ν•œλ‹€.

기본적으둜 μ•”μ‹œμ  anyκ°€ λ˜κ±°λ‚˜ Could not find a declaration file for module './value' 와 같은 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

13.8.2 checkJS

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” λ‹¨μˆœνžˆ μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ„ νƒ€μž… 검사할 수 μžˆλ„λ‘ νƒ€μž…μŠ€ν¬λ¦½νŠΈ 파일둜 λ³€ν™˜ν•˜λŠ” 것 이상을 μˆ˜ν–‰ν•  수 μžˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌλ„ νƒ€μž… 검사가 κ°€λŠ₯ν•˜λ‹€. checkJS 컴파일러 μ˜΅μ…˜μ€ 두 κ°€μ§€ μš©λ„λ‘œ μ‚¬μš©λœλ‹€.

  • allowJS μ˜΅μ…˜μ΄ 아직 true κ°€ μ•„λ‹ˆλΌλ©΄ 기본값을 true 둜 μ„€μ •ν•˜κΈ°
  • .js .jsx νŒŒμΌμ—μ„œ νƒ€μž… 검사기 ν™œμ„±ν™”ν•˜κΈ°

checkJS κ°€ ν™œμ„±ν™”λ˜λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ€ 잘λͺ»λœ λ³€μˆ˜λͺ…에 λŒ€ν•œ νƒ€μž… 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

@ts-check

@ts-check 주석을 μ‚¬μš©ν•˜λ©΄ ν•΄λ‹Ή μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ€ checkJS μ˜΅μ…˜μ΄ ν™œμ„±ν™” λœλ‹€.

13.8.3 JSDoc 지원

allowJS 와 checkJS κ°€ ν™œμ„±ν™”λ˜λ©΄ νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ½”λ“œλŠ” JSDoc μ •μ˜λ₯Ό μΈμ‹ν•œλ‹€.

13.9 ꡬ성 ν™•μž₯

점점 더 λ§Žμ€ νƒ€μž…μŠ€ν¬λ¦½νŠΈ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜κ²Œ λ˜λ©΄μ„œ 반볡적으둜 λ™μΌν•œ ν”„λ‘œμ νŠΈ 섀정을 μž‘μ„±ν•˜λŠ” μžμ‹ μ„ λ°œκ²¬ν•˜κ²Œ 될 것이닀.

비둝 νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” ꡬ성 νŒŒμΌμ„ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ μž‘μ„±ν•˜κ±°λ‚˜ import λ˜λŠ” require μ‚¬μš©μ„ ν—ˆμš©ν•˜μ§€ μ•Šμ§€λ§Œ

TSConfig 파일이 λ‹€λ₯Έ ꡬ성 νŒŒμΌμ—μ„œ ꡬ성 값을 ν™•μž₯ν•˜κ±°λ‚˜ λ³΅μ‚¬ν•˜λ„λ‘ μ„ νƒν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ„ μ œκ³΅ν•œλ‹€.

13.10 ν”„λ‘œμ νŠΈ 레퍼런슀

μ§€κΈˆκΉŒμ§€ 보여쀀 νƒ€μž…μŠ€ν¬λ¦½νŠΈ ꡬ성 νŒŒμΌμ€ ν”„λ‘œμ νŠΈμ˜ λͺ¨λ“  μ†ŒμŠ€ νŒŒμΌμ„ κ΄€λ¦¬ν•œλ‹€κ³  κ°€μ •ν–ˆλ‹€.

λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œλŠ” ν”„λ‘œμ νŠΈμ˜ μ„œλ‘œ λ‹€λ₯Έ μ˜μ—­μ—μ„œλ‘œ λ‹€λ₯Έ ꡬ성 νŒŒμΌμ„ μ‚¬μš©ν•˜λŠ” 것이 μœ μš©ν•  수 μžˆλ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” μ—¬λŸ¬ 개의 ν”„λ‘œμ νŠΈλ₯Ό ν•¨κ»˜ λΉŒλ“œν•˜λŠ” ν”„λ‘œμ νŠΈ 레퍼런슀 μ‹œμŠ€ν…œμ„ μ •μ˜ν•  수 μžˆλ‹€.

단일 TSConfig νŒŒμΌμ„ μ‚¬μš©ν•˜λŠ” 것보닀 쑰금 더 μž‘μ—…μ΄ λ§Žμ§€λ§Œ λͺ‡ κ°€μ§€ 핡심 이점이 μžˆλ‹€.

  • νŠΉμ • μ½”λ“œ μ˜μ—­μ— λŒ€ν•΄ λ‹€λ₯Έ 컴파일러 μ˜΅μ…˜μ„ μ§€μ •ν•  수 μžˆλ‹€.
  • νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” κ°œλ³„ ν”„λ‘œμ νŠΈμ— λŒ€ν•œ λΉŒλ“œ 좜λ ₯을 μΊμ‹œν•  수 μžˆμœΌλ―€λ‘œ λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ˜ λΉŒλ“œ μ‹œκ°„μ΄ 훨씬 빨라진닀.
  • ν”„λ‘œμ νŠΈ λž˜νΌλŸ°μŠ€λŠ” μ½”λ“œμ˜ κ°œλ³„ μ˜μ—­μ„ κ΅¬μ‘°ν™”ν•˜λŠ” 데 μœ μš©ν•œ μ˜μ‘΄μ„± 트리λ₯Ό μ‹€ν–‰ν•œλ‹€.

ν”„λ‘œμ νŠΈ 레퍼런슀λ₯Ό ν™œμ„±ν™” μ‹œν‚€κΈ° μœ„ν•΄ ν”„λ‘œμ νŠΈ 섀정을 κ΅¬μΆ•ν•˜λŠ” 방법을 μ†Œκ°œν•œλ‹€.

  • TSConfig 의 composite λͺ¨λ“œλŠ” 닀쀑 TSConfig λΉŒλ“œ λͺ¨λ“œμ— μ ν•©ν•œ λ°©μ‹μœΌλ‘œ μž‘λ™ν•˜λ„λ‘ κ°•μ œν•œλ‹€.
  • TSConfig 의 references λŠ” TSConfig κ°€ μ˜μ‘΄ν•˜λŠ” 볡합 TSConfig λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
  • λΉŒλ“œ λͺ¨λ“œλŠ” 볡합 TSConfig 레퍼런슀λ₯Ό μ‚¬μš©ν•΄ 파일 λΉŒλ“œλ₯Ό μ‘°μ •ν•œλ‹€.

13.10.1 composite

composite ꡬ성 μ˜΅μ…˜μ„ 선택해 파일 μ‹œμŠ€ν…œ μž…λ ₯κ³Ό 좜λ ₯이 μ œμ•½ 쑰건을 μ€€μˆ˜ν•¨μ„ λ‚˜νƒ€λ‚Έλ‹€.

composite 이 true 일 λ–„λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  • rootDir 섀정이 아직 λͺ…μ‹œμ μœΌλ‘œ μ„€μ •λ˜μ§€ μ•Šμ•˜λ‹€λ©΄ 기본적으둜 TSConfig 파일이 ν¬ν•¨λœ λ””λ ‰ν„°λ¦¬λ‘œ μ„€μ •λœλ‹€.
  • λͺ¨λ“  κ΅¬ν˜„ νŒŒμΌμ€ ν¬ν•¨λœ νŒ¨ν„΄κ³Ό μΌμ‹œμ μœΌλ‘œ 파일 배열에 λ‚˜μ—΄λ˜μ–΄μ•Ό ν•œλ‹€.
  • declaration 컴파일러 μ˜΅μ…˜μ€ λ°˜λ“œμ‹œ true 이어야 ν•œλ‹€.

μ΄λŸ¬ν•œ 변경은 νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ ν”„λ‘œμ νŠΈμ— λŒ€ν•œ λͺ¨λ“  μž…λ ₯ 파일과 μΌμΉ˜ν•˜λŠ” .d.ts νŒŒμΌμ„ μƒμ„±ν•˜λ„λ‘ κ°•μ œν•  λ•Œ μœ μš©ν•˜λ‹€.

λ˜ν•œ references ꡬ성 μ˜΅μ…˜κ³Ό ν•¨κ»˜ μ‚¬μš©ν•  λ•Œ μœ μš©ν•˜λ‹€.

13.10.2 reference

references 섀정이 μžˆλŠ” 볡합 νƒ€μž…μŠ€ν¬λ¦½νŠΈ ν”„λ‘œμ νŠΈμ—μ„œ μƒμ„±λœ 좜λ ₯에 μ˜μ‘΄ν•¨μ„ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

참쑰된 ν”„λ‘œμ νŠΈμ—μ„œ λͺ¨λ“ˆμ„ κ°€μ Έμ˜€λŠ” 것은 좜λ ₯ .d.ts μ„ μ–Έ νŒŒμΌμ—μ„œ κ°€μ Έμ˜€λŠ” κ²ƒμœΌλ‘œ νƒ€μž… μ‹œμŠ€ν…œμ— ν‘œμ‹œλœλ‹€.

13.10.3 λΉŒλ“œ λͺ¨λ“œ

μ½”λ“œ μ˜μ—­μ΄ ν”„λ‘œμ νŠΈ 레퍼런슀λ₯Ό μ‚¬μš©ν•˜λ„λ‘ ν•œλ²ˆ μ„€μ •ν•˜λ©΄ λΉŒλ“œ λͺ¨λ“œμ—μ„œ -b λ˜λŠ” --b CLI ν”Œλž˜κ·Έλ₯Ό 톡해 tsc λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

이λ₯Ό 톡해 tsc λŠ” λ‚΄μš©κ³Ό 파일 좜λ ₯이 λ§ˆμ§€λ§‰μœΌλ‘œ μƒμ„±λœ μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ λ§ˆμ§€λ§‰ λΉŒλ“œ 이후 λ³€κ²½λœ ν”„λ‘œμ νŠΈλ§Œ λ‹€μ‹œ λΉŒλ“œ ν•œλ‹€.

  1. TSConfig 의 참쑰된 ν”„λ‘œμ νŠΈλ₯Ό μ°ΎλŠ”λ‹€.
  2. μ΅œμ‹  μƒνƒœμΈμ§€ κ°μ§€ν•œλ‹€.
  3. 였래된 ν”„λ‘œμ νŠΈλ₯Ό μ˜¬λ°”λ₯Έ μˆœμ„œλ‘œ λΉŒλ“œν•œλ‹€.
  4. 제곡된 TSConfig λ˜λŠ” TSConfig μ˜μ‘΄μ„±μ΄ λ³€κ²½λœ 경우 λΉŒλ“œν•œλ‹€.

μ½”λ“œλ„€μ΄ν„° ꡬ성

μ €μž₯μ†Œμ—μ„œ νƒ€μž…μŠ€ν¬λ¦½νŠΈ ν”„λ‘œμ νŠΈ 레퍼런슀λ₯Ό μ„€μ •ν•˜λŠ” νŽΈλ¦¬ν•œ 방법은 빈 파일 λ°°μ—΄κ³Ό μ €μž₯μ†Œμ˜ λͺ¨λ“  ν”„λ‘œμ νŠΈ λž˜νΌλŸ°μŠ€μ— λŒ€ν•œ 래퍼런슀λ₯Ό μ‚¬μš©ν•΄ μ΅œμƒμœ„ 레벨의 tsconfig.json 을 μ„€μ •ν•˜λŠ” 것이닀. μ΅œμƒμœ„ TSConfig λŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ 파일 자체λ₯Ό λΉŒλ“œν•˜λ„λ‘ μ§€μ‹œν•˜μ§€ μ•ŠλŠ”λ‹€.

λŒ€μ‹  ν•„μš”μ— 따라 참쑰된 ν”„λ‘œμ νŠΈλ₯Ό λΉŒλ“œν•˜λ„λ‘ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— μ•Œλ¦¬λ €λŠ” μ—­ν• λ§Œ ν•œλ‹€.

example

{
  "files": [],
  "references": [
    { "path" :  "./packages/core" },
    { "path" :  "./packages/shell"}
  ]
}

λΉŒλ“œ μ˜΅μ…˜

λΉŒλ“œ λͺ¨λ“œλŠ” λͺ‡ κ°€μ§€ λΉŒλ“œμ— νŠΉν™”λœ CLI μ˜΅μ…˜μ„ μ§€μ›ν•œλ‹€.

  • --clean: μ§€μ •λœ ν”„λ‘œμ νŠΈμ˜ 좜λ ₯을 μ‚­μ œν•œλ‹€. (--dry 와 ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆλ‹€.)
  • --dry: μˆ˜ν–‰ν•  μž‘μ—…μ„ λ³΄μ—¬μ£Όμ§€λ§Œ μ‹€μ œλ‘œλŠ” 아무것도 λΉŒλ“œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • --force: λͺ¨λ“  ν”„λ‘œμ νŠΈκ°€ 였래된 κ²ƒμ²˜λŸΌ μž‘λ™ν•œλ‹€.
  • -w λ˜λŠ” --watch: 일반적인 νƒ€μž…μŠ€ν¬λ¦½νŠΈ watch λͺ¨λ“œμ™€ λ™μΌν•˜λ‹€.
⚠️ **GitHub.com Fallback** ⚠️