LearningTS Chapter 13 - YDP-SPLOUNGE-CLUB/typescript-study GitHub Wiki
νμ μ€ν¬λ¦½νΈμ ꡬμ±λ ₯μ λΉλ―μ ν΅ν΄ μ 곡λλ 100κ° μ΄μμ νλΆνκ΅¬μ± μ΅μ μμλΆν° λΉλ‘―λλ€.
- tsc μ μ λ¬λ λͺ λ Ήμ€ νλκ·Έ
- νμ μ€ν¬λ¦½νΈ κ΅¬μ± νμΌ TSConfig
tsc -- help λ₯Ό μ€νν΄ μΌλ°μ μΌλ‘ μ¬μ©νλ CLI νλκ·Έ λͺ©λ‘μ κ°μ Έμ¬ μ μλ€. μ 체 κ΅¬μ± μ΅μ λͺ©λ‘μ tsc --all μΌλ‘ νμΈ κ°λ₯νλ€.
tsc CLIλ μμκ³Ό κ°κ²©μ μ½μΌμ μ§μ ν΄ κ°λ μ±μ λμ΄λ pretty λͺ¨λλ₯Ό μ§μνλ€. μΆλ ₯ ν°λ―Έλμ΄ μ¬λ¬ μμ ν μ€νΈλ₯Ό μ§μνλ€λ κ²μ κ°μ§νλ©΄ κΈ°λ³Έμ μΌλ‘ pretty λͺ¨λλ‘ μ€μ λλ€.
νμκ° tsc CLI μμ κ°μ₯ μ’μνλ λ°©λ²μ -w λ -watch λͺ¨λλ₯Ό μ¬μ©νλ κ²μ΄λ€.
watch λͺ¨λλ₯Ό μ μ©νλ©΄ μ’ λ£νλ λμ νμ μ€ν¬λ¦½νΈλ₯Ό 무기ν μ€ν μνλ‘ μ μ§νκ³ λͺ¨λ μ€λ₯μ μ€μκ° λͺ©λ‘μ κ°μ Έμμ ν°λ―Έλμ μ§μμ μΌλ‘ μ λ°μ΄νΈνλ€.
λͺ¨λ νμΌ μ΄λ¦κ³Ό κ΅¬μ± μ΅μ μ νμ tsc μ μ 곡νλ λμ λλ ν°λ¦¬μ tsconfig.json νμΌμ ꡬ체μ μΌλ‘ λͺ μ κ°λ₯νλ€.
tsc λͺ λ Ήμ€μλ tsconfig.json νμΌμ μμ±νκΈ° μν --init λͺ λ Ήμ΄ ν¬ν¨λμ΄μΌ νλ€.
tsc --init μ λ°λΌ μμ±λ TSConfig νμΌμ μ΄ν΄λ³΄λ©΄ ν΄λΉ νμΌμ κ΅¬μ± μ΅μ μ΄ "compilerOptions" κ°μ²΄ λ΄μ μλ€. CLI μ tsconfig νμΌμμ μ¬μ© κ°λ₯ν λλΆλΆμ μ΅μ μ λ€μ λ κ°μ§ λ²μ£Ό μ€ νλλ‘ λΆλ₯λλ€.
- μ»΄νμΌλ¬: ν¬ν¨λ κ° νμΌμ΄ νμ μ€ν¬λ¦½νΈμ λ°λΌ μ»΄νμΌλκ±°λ νμ μ νμΈνλ λ°©λ²
- νμΌ: νμ μ€ν¬λ¦½νΈκ° μ€νλ νμΌκ³Ό μ€νλμ§ μμ νμΌ
κΈ°λ³Έμ μΌλ‘ tsc λ νμ¬ λλ ν°λ¦¬μ νμ λλ ν°λ¦¬μ μλ μ¨κ²¨μ§μ§ μμ λͺ¨λ .ts νμΌμμ μ€νλκ³ μ¨κ²¨μ§ λλ ν°λ¦¬μ node_modules λ 무μνλ€.
νμΌμ ν¬ν¨νλ κ°μ₯ νν λ°©λ²μΌλ‘ tsconfig.json μ μ΅μμ "includes" μμ±μ μ¬μ©νλ€.
μλ₯Ό λ€μ΄ λ€μ κ΅¬μ± νμΌμ tsconfig.json κ³Ό κ΄λ ¨λ src/ λλ ν°λ¦¬ μμ λͺ¨λ νμ μ€ν¬λ¦½νΈ μμ€ νμΌμ μ¬κ·μ μΌλ‘ ν¬ν¨νλ€.
νμ μ€ν¬λ¦½νΈλ κΈ°λ³Έμ μΌλ‘ νμ₯μκ° .ts μ λͺ¨λ νμΌμ μ½μ μ μλ€. κ·Έλ¬λ μΌλΆ νλ‘μ νΈλ JSON λͺ¨λ λλ 리μνΈμ κ°μ UI λΌμ΄λΈλ¬λ¦¬λ₯Ό μν JSX ꡬ문μ²λΌ νμ₯μκ° λ€λ₯Έ νμΌμ μ½μ μ μμ΄μΌ νλ€.
κ°μ JSX ꡬ문μ 리μνΈ κ°μ UI λΌμ΄λΈλ¬λ¦¬μμ μμ£Ό μ¬μ©νλ€. JSX ꡬ문μ μλ°μ€ν¬λ¦½νΈκ° μλλ€. νμ μ€ν¬λ¦½νΈμ νμ μ μμ λ§μ°¬κ°μ§λ‘ μλ°μ€ν¬λ¦½νΈλ‘ μ»΄νμΌλλ μλ°μ€ν¬λ¦½νΈ ꡬ문μ νμ₯μ΄λ€.
νμ μ€ν¬λ¦½νΈκ° .tsx νμΌμ λν μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό λ΄λ³΄λ΄λ λ°©λ²μ "jsx" μ»΄νμΌλ¬ μ΅μ μ μ¬μ©λλ κ°μΌλ‘ κ²°μ λλ€. νλ‘μ νΈλ [ν 13-1]μ μλ μΈ κ°μ§ κ° μ€ νλλ₯Ό μ¬μ©νλ€.
| κ° | μ λ ₯ μ½λ | μΆλ ₯ μ½λ | μΆλ ₯ νμΌ νμ₯μ |
|---|---|---|---|
| preserve | .jsx | ||
| react | React.createElement("div") | .js | |
| react-native | .js |
{
"compilerOptions" : {
"jsx": "reserve"
}
}λ°λ²¨κ³Ό κ°μ λ³λμ λκ΅¬λ‘ μ½λλ₯Ό λ³ννλ κ²μ²λΌ νμ μ€ν¬λ¦½γ μ λ΄μ₯λ νΈλμ€νμΌλ¬λ₯Ό μ§μ μ μΌλ‘ μ¬μ©νμ§ μμ κ²½μ°μλ jsx μ λν΄ νμ©λ κ°μ μ¬μ©ν μ μλ€. Next.js λλ λ¦¬λ―Ήμ€ μ κ°μ μ΅μ νλ μμν¬λ‘ ꡬμΆλ λλΆλΆμ μΉ μ±μ 리μνΈ κ΅¬μ± λ° μ»΄νμΌ κ΅¬λ¬Έμ μ²λ¦¬νλ€. μ΄λ¬ν νλ μμν¬ μ€ νλλ₯Ό μ¬μ©νλ©΄ νμ μ€ν¬λ¦½νΈ λ΄μ₯ νΈλμ€νμΌλ¬λ₯Ό μ§μ ꡬμ±ν νμκ° μλ€.
μ λ€λ¦ νμ΄ν ν¨μ κ΅¬λ¬Έμ΄ JSX ꡬ문과 μΆ©λνλ€. .tsx νμΌμμ νμ΄ν ν¨μμ λν νμ μΈμ λ₯Ό μμ±νλ €κ³ νλ©΄ T μμμ μμ νκ·Έμ λν μ’ λ£ νκ·Έκ° μκΈ° λλ¬Έμ μ€λ₯κ° λ°μνλ€.
const identity = <T>(input: T) => input; // Error<T = unknown> μ΄λΌλ ꡬ문μ μΆκ°ν΄ ν΄κ²° κ°λ₯νλ€.
νμ μ€ν¬λ¦½νΈλ resolveJsonModule μ»΄νΌμΌλ¬ μ΅μ μ true λ‘μ€μ νλ©΄ json νμΌμ μ½μ μ μλ€.
json νμΌμ λ§μΉ κ°μ²΄λ₯Ό λ΄λ³΄λ΄λ .ts νμΌμΈ κ²μ²λΌ κ°μ Έμ€κ³ ν΄λΉ κ°μ²΄μ νμ μ const λ³μμΈ κ²μ²λΌ μ μΆνλ€.
{
"activist": "Mary";
}import { activist } from "./activist.json";
console.log(activist); // Ok Logs MaryesModuleInterop μ»΄νμΌλ¬ μ΅μ μ΄ νμ±νλ κ²½μ°μλ κΈ°λ³Έ κ°μ Έμ€κΈ°λ₯Ό μ¬μ©ν μ μλ€.
import data from "./activist.json";array λλ number κ°μ 리ν°λ΄ νμ μ ν¬ν¨ν JSON νμΌμ΄λΌλ©΄ import ꡬ문μΌλ‘ * μ μ¬μ©νλ€.
κΈ°λ³Έμ μΌλ‘ νμ μ€ν¬λ¦½νΈ μΆλ ₯ νμΌμ ν΄λΉ μμ€ νμΌκ³Ό λμΌν μμΉμ μμ±νλ€.
κ²½μ°μ λ°λΌ μΆλ ₯ νμΌμ λ€λ₯Έ ν΄λμ μμ±νλ κ²μ΄ λ λμ μ μλ€.
outDir μ»΄νμΌλ¬ μ΅μ μ μ¬μ©νλ©΄ μΆλ ₯ νμΌμ λ£¨νΈ λλ ν°λ¦¬λ₯Ό λ€λ₯΄κ² μ§μ κ°λ₯νλ€.
νμ μ€ν¬λ¦½νΈλ ES3 κ³Ό κ°μ μ€λλ νκ²½μμ μ€νν μ μλ μλ°μ€ν¬λ¦½νΈ μΆλ ₯ νμΌμ μμ± κ°λ₯νλ€.
νμ μ€ν¬λ¦½νΈλ μλ°μ€ν¬λ¦½νΈ μ½λ ꡬ문μ μ§μνκΈ° μν΄ μ΄λ λ²μ κΉμ§ λ³νν΄μΌ νλμ§λ₯Ό μ§μ νλ target μ»΄νμΌλ¬ μ΅μ μ μ 곡νλ©°
μ§μ νμ§ μλλ€λ©΄ "es3" κ° κΈ°λ³Έμ μΌλ‘ μ§μ λλ€.
tsc --init μ κΈ°λ³Έμ μΌλ‘ es2016 μ μ§μ νλλ‘ μ€μ λμ΄ μμ§λ§ λμ νλ«νΌμ λ°λΌ κ°λ₯ν ν μ΅μ μλ°μ€ν¬λ¦½νΈ ꡬ문μ μ¬μ©νλκ²μ΄ μ’λ€.
.d.ts μ μΈ νμΌμ ν¨ν€μ§λ‘ λ°°ν¬ν΄ μ¬μ©νλ κ³³μμ μ½λ νμ μ νμνλ λ°©λ²μ μκ°νλ€.
λλΆλΆμ ν¨ν€μ§λ νμ μ€ν¬λ¦½νΈμ declaration μ»΄νμΌλ¬ μ΅μ μ μ¬μ©ν΄ μμ€ νμΌμμ .d.ts μΆλ ₯ νμΌμ λ΄λ³΄λΈλ€.
{
"compilerOptions": {
"declaration": true
}
}.d.ts μΆλ ₯ νμΌμ outDir μ΅μ μ λ°λΌ .js νμΌκ³Ό λμΌν μΆλ ₯ κ·μΉμ λ°λΌ λ΄λ³΄λ΄μ§λ€.
declaration μ»΄νμΌλ¬ μ΅μ μ λν νΉλ³ν μΆκ°λ‘ νμ μ€ν¬λ¦½νΈκ° .js μ .jsx νμΌ μμ΄ μ μΈ νμΌλ§ λ΄λ³΄λ΄λλ‘ μ§μνλ emitDeclarationOnly μ»΄νμΌλ¬ μ΅μ μ΄ μλ€.
μμ€ λ§΅μ μΆλ ₯ νμΌμ λ΄μ©μ΄ μλ³Έ μμ€ νμΌκ³Ό μ΄λ»κ² μΌμΉνλμ§μ λν μ€λͺ μ΄λ€.
μμ€λ§΅μ μΆλ ₯ νμΌμ νμν λ λλ²κ±° κ°μ κ°λ°μ λꡬμμ μλ³Έ μμ€ μ½λλ₯Ό νμνλλ‘ μ€μ νλ€.
νμ μ€ν¬λ¦½νΈ sourceMap μ»΄νμΌλ¬ μ΅μ μ μ¬μ©νλ©΄ .js λλ .jsx μΆλ ₯ νμΌκ³Ό ν¨κ»
js.map, jsx.map μμ€ λ§΅μ μΆλ ₯ κ°λ₯νλ€.
.d.ts μ μΈ νμΌμ λν μμ€ λ§΅μ μμ±ν μλ μλ€. declarationMap μ»΄νμΌλ¬ μ΅μ μ μλ³Έ μμ€ νμΌμ ν΄λΉνλ κ° .d.ts μ λν .d.ts.map μμ€ λ§΅μ μμ±νλλ‘ μ§μνλ€.
λ€λ₯Έ λꡬλ₯Ό μ΄μ©ν΄ μμ€ νμΌμ μ»΄νμΌνκ³ μλ°μ€ν¬λ¦½νΈλ₯Ό μΆλ ₯νλ νλ‘μ νΈμμ νμ μ€ν¬λ¦½νΈλ νμΌ μμ±μ λͺ¨λ 건λλ°λλ‘ μ§μ κ°λ₯νλ€.
noEmit μ»΄νμΌλ¬ μ΅μ μ νμ±ν νλ©΄ νμ μ€ν¬λ¦½νΈκ° μ¨μ ν νμ κ²μ¬κΈ°λ‘λ§ μλνλ€.
λλΆλΆμ νμ μ€ν¬λ¦½νΈ κ΅¬μ± μ΅μ μ νμ κ²μ¬κΈ°λ₯Ό μ μ΄νλ€. κ΅¬μ± μ΅μ μ λμ¨νκ² κ΅¬μ±ν΄ μ€λ₯κ° μμ ν νμ€ν λλ§ νμ κ²μ¬ μ€λ₯λ₯Ό λ³΄κ³ νλλ‘ νκ±°λ κ΅¬μ± μ΅μ μ μ격νκ² κΆμ±ν΄ κ±°μ λͺ¨λ μ½λλ₯Ό μ¬λ°λ₯΄κ² μ μ λ ₯νλλ‘ μꡬν μ μλ€.
λ¨Όμ νμ μ€ν¬λ¦½νΈκ° λ°νμ νκ²½μ μλ€κ³ κ°μ νλ μ μ API λ lib μ»΄νμΌλ¬ μ΅μ μΌλ‘ ꡬμ±ν μ μλ€.
{
"compilerOptions": {
"lib": ["es2020"]
}
}μ€μ
νμ μ€ν¬λ¦½νΈλ μμ€ μ½λμ λͺ μμ μΌλ‘ ν¬ν¨λμ§ μμ μ μΈ νμΌμμ νμ κ²μ¬λ₯Ό 건λλ°λλ‘ νλ skipLibCheck μ»΄νμΌλ¬ μ΅μ μ μ 곡νλ€.
skipLibCheck λ νμ κ²μ¬ μΌλΆλ₯Ό 건λλ°λ μμ μΌλ‘ νμ μ€ν¬λ¦½νΈ μ±λ₯μ κ°μ νλ€.
νμ μ€ν¬λ¦½νΈμ νμ κ²μ¬ μ»΄νμΌλ¬ μ΅μ λλΆλΆμ νμ μ€ν¬λ¦½νΈμ μ격 λͺ¨λλ‘ κ·Έλ£Ήν λλ€. μ격ν μ»΄νμΌλ¬ μ΅μ μ κΈ°λ³Έμ μΌλ‘ false μ΄λ©° νμ±ν λλ©΄ νμ κ²μ¬κΈ°μ μΌλΆ μΆκ°μ μΈ κ²μ¬λ₯Ό μΌλλ‘ μ§μνλ€.
νΉμ κ²μ¬λ₯Ό μ μΈν λͺ¨λ μ격 λͺ¨λ κ²μ¬λ₯Ό νμ±ννκ³ μΆλ€λ©΄ strict λ₯Ό νμ±ννκ³ νΉμ κ²μ¬λ₯Ό λͺ μμ μΌλ‘ λΉνμ±ν κ°λ₯νλ€.
νμ μ€ν¬λ¦½νΈκ° λ§€κ°λ³μ λλ μμ±μ νμ μ μ μΆν μ μλ κ²½μ°λΌλ©΄ any νμ μΌλ‘ κ°μ νλ€. any νμ μ νμ μ€ν¬λ¦½νΈμ νμ κ²μ¬λ₯Ό λλΆλΆ μ°νν μ μμΌλ―λ‘ μ½λμμ μ΄λ¬ν μμμ νμ μ νμ©νμ§ μλ κ²μ΄ μ’λ€.
noImplicitAny μ»΄νμΌλ¬ μ΅μ μ μμμ any λ‘ λ체λ λ νμ μ€ν¬λ¦½νΈμ νμ κ²μ¬ μ€λ₯κ° λ°μνλλ‘ μ§μνλ€.
const logMEssage = (message) => {
// Error Parameter 'message' implicit has an any type
console.log(`message: ${message}`)
}νμ μ€ν¬λ¦½νΈκ° μ²μ μΆμλμμ λ λ΄μ₯λ Function.apply , bind, call ν¨μ μ νΈλ¦¬ν°λ₯Ό λνλΌ μ μμ λ§νΌ μΆ©λΆν νμ μμ€ν μ΄ μμλ€. κΈ°λ³Έμ μΌλ‘ μ΄λ° ν¨μλ ν¨μμ μΈμ λͺ©λ‘μ λν΄ any λ₯Ό μ¬μ©ν΄μΌ νκ³ νμ μμ μ±κ³Όλ λ§€μ° κ±°λ¦¬κ° λ©μλ€.
strictBindCallApplyλ₯Ό νμ±ν νλ©΄ ν¨μ λ³νμ λν΄ ν¨μ¬ λ μ νν νμ μ μ¬μ©ν μ μλ€.
strictFunctionTypes μ»΄νμΌλ¬ μ΅μ μ ν¨μ λ§€κ°λ³μ νμ μ μ½κ° λ μ격νκ² κ²μ¬νλ€.
λ§€κ°λ³μκ° λ€λ₯Έ νμ μ λ§€κ°λ³μ νμ νμ μΈ κ²½μ° ν¨μ νμ μ λ μ΄μ λ€λ₯Έ ν¨μ νμ μ ν λΉ κ°λ₯ν κ²μΌλ‘ κ°μ£Όλμ§ μλλ€.
null κ³Ό undefined κ°μ λΉμ΄ μλ νμ μ λΉμ΄ μμ§ μμ νλΉμ ν λΉνλλ‘ νμ©νλ μΈμ΄μ μμ΅ λ¬λ¬μ μ€μμ λν΄ μ΄μΌκΈ°νλ€.
νμ μ€ν¬λ¦½νΈμ strictNullChecks νλκ·Έλ₯Ό λΉνμ±ν νλ©΄ μ½λμ λͺ¨λ νμ μ null | undefined κ° μΆκ°λκ³ λͺ¨λ λ³μκ° null λλ undefined λ₯Ό λ°μ μ μλλ‘ νμ©νλ€.
ν΄λμ€μ κ° μμ±μ΄ ν΄λμ€ μμ±μμ νμ€νκ² ν λΉλμλμ§λ₯Ό νμΈνλ ν΄λμ€μ μγ±κ²¨ν μ΄κΈ°ν κ²μ¬λ₯Ό μ΄μΌκΈ° νμλ€.
νμ μ€ν¬λ¦½νΈμ strictPropertyInitialization νλκ·Έλ μ΄κΈ°νκ° μκ³ μμ±μμ νμ€νκ² ν λΉλμ§ μμ ν΄λμ€ μμ±μμ νμ μ€λ₯λ₯Ό λ°μμν¨λ€.
νμ μ€ν¬λ¦½νΈμ λͺ¨λ² μ¬λ‘λ strictPropertyInitialization λ₯Ό νμ±ν μν€λ κ²μ΄λ€.
λͺ¨λ μΈμ΄μμ μ€λ₯ μ²λ¦¬λ λ³Έμ§μ μΌλ‘ μμ νμ§ μμ κ°λ μ΄λ€. μ΄λ‘ μ μΌλ‘ λͺ¨λ ν¨μλ μ¬μ©μκ° μμ±ν throw λ¬Έμ΄λ undefined μμ±μ μ½λ κ²κ³Ό κ°μ κ·Ήλ¨μ μΈ κ²½μ°μ μ¬λ¬ μ€λ₯λ₯Ό λ°μμν¨λ€.
useUnknownInCatchVariables λ νμ μ€ν¬λ¦½νΈμ κΈ°λ³Έ catch μ error νμ μ unknown μΌλ‘ λ³κ²½νλ€.
AMD, CommonJS, ECMAScript λ± λͺ¨λ λ΄μ©μ λ΄λ³΄λ΄κ³ κ°μ Έμ€κΈ° μν μλ°μ€ν¬λ¦½νΈμ λ€μν μμ€ν μ μ΅μ νλ‘κ·Έλλ° μΈμ΄μμ κ°μ₯ 볡μ‘ν λͺ¨λ μμ€ν μ΄λ€.
μλ°μ€ν¬λ¦½νΈλ νμΌμ΄ μλ‘μ μ½ν μΈ λ₯Ό κ°μ Έμ€λ λ°©μμ΄ μΉνκ³Ό κ°μ μ¬μ©μ μμ± νλ μμν¬μ λ°λΌ ꡬλλλ κ²½μ°κ° λ§λ€λ μ μμ
μλμ μΌλ‘ νΉμ΄νλ€. νμ μ€ν¬λ¦½νΈλ κ°μ₯ ν©λ¦¬μ μΈ μ¬μ©μ μμ λͺ¨λμ ꡬμ±μ λνλ΄λ κ΅¬μ± μ΅μ μ μ 곡νκΈ° μν΄ μ΅μ μ λ€νλ€.
μ΄λ€ λͺ¨λ μμ€ν μΌλ‘ λ³νλ μ½λλ₯Ό μ¬μ©ν μ§ κ²°μ νκΈ° μν΄ module μ»΄νμΌ μ΅μ μ μ 곡νλ€. ECMA μ€ν¬λ¦½νΈ λͺ¨λλ‘ μμ€ μ½λλ₯Ό μμ±ν λ νμ μ€ν¬λ¦½νΈλ module κ°μ λ°λΌ export μ import λ¬Έμ λ€λ₯Έ λͺ¨λ μμ€ν μΌλ‘ λ³νν μ μλ€.
target μ»΄νμΌλ¬ μ΅μ μ΄ es3, es5 μΈ κ²½μ° module μ»΄νμΌλ¬ μ΅μ μ κΈ°λ³Έκ°μ commonjs κ° λλ€.
κ·Έλ μ§ μκ³ ECMAScript μ€ν¬λ¦½νΈ λͺ¨λλ‘ μΆλ ₯νλλ‘ μ§μ νκΈ° μν΄ module μ»΄νμΌλ¬ μ΅μ μ es2015 λ‘ κΈ°λ³Έ μ€μ λλ€.
μλ°μ€ν¬λ¦½νΈ λͺ¨λλ‘ μμ ν λ λͺ¨λμ κΈ°λ³Έ λ΄λ³΄λ΄κΈ°μ λ€μμ€νμ΄μ€ μΆλ ₯ κ°μλ μ°¨μ΄μ μ΄ μλ€. λͺ¨λμ κΈ°λ³Έ λ΄λ³΄λ΄κΈ°λ λ΄λ³΄λΈ κ°μ²΄μ .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 κ΅¬μ± μ΅μ μ module μ΄ es2015 λλ esnext μ κ°μ ECMAScript λͺ¨λ νμμ΄ μλ κ²½μ° νμ μ€ν¬λ¦½νΈμμ λ΄λ³΄λΈ μλ°μ€ν¬λ¦½νΈ μ½λμ μλμ λ‘μ§μ μΆκ°νλ€. ν΄λΉ λ‘μ§μ ECMAScript λͺ¨λμ΄ κΈ°λ³Έ λλ λ€μμ€νμ΄μ€ κ°μ Έμ€κΈ°μ λν ECMAScript λͺ¨λμ κ·μΉμ μ€μνμ§ μλ κ²½μ°μλ λͺ¨λμμ κ°μ Έμ¬ μ μλλ‘ νλ€.
esModuleInterop λ₯Ό νμ±ν νλ μ΄μ μ€ νλλ κΈ°λ³Έ λ΄λ³΄λ΄κΈ°λ₯Ό μ 곡νμ§ μλ react κ°μ ν¨ν€μ§λ₯Ό μν΄μμ΄λ€.
react ν¨ν€μ§μ κΈ°λ³Έ κ°μ Έμ€κΈ°λ₯Ό μ¬μ©νλ €κ³ νλ©΄ νμ μ€ν¬λ¦½νΈλe sModuleInterop μ΄ νμ±ν λμ§ μμ κ²μ λν νμ μ€λ₯λ₯Ό λ³΄κ³ νλ€.
allowSyntheticDefaultImports μ»΄νμΌλ¬ μ΅μ μ ECMAScript λͺ¨λμ΄ νΈνλμ§ μλ CommonJS λ€μμ€νμ΄μ€ λ΄λ³΄λ΄κΈ° νμΌμμ κΈ°λ³Έ κ°μ Έμ€κΈ°λ₯Ό ν μ μμμ νμ μμ€ν μ μλ¦°λ€.
allowSyntheticDefaultImports μ»΄νμΌλ¬ μ΅μ μ λ€μ μ€ νλκ° true μΈ κ²½μ°μλ§ true λ‘ κΈ°λ³Έμ μΌλ‘ μ€μ λλ€.
- module μ΄ system μΌ κ²½μ°
- esModuleInterop μ΄ true μ΄κ³ module μ΄ es2015 λλ esnext μ κ°μ ECMAScript λͺ¨λ νμμ΄ μλ κ²½μ°
ν λ²μ νλμ νμΌμμλ§ μλνλ λ°λ²¨κ³Ό κ°μ μΈλΆ νΈλμ€νμΌλ¬λ νμ μμ€ν μ 보λ₯Ό μ¬μ©ν΄ μλ°μ€ν¬λ¦½νΈλ₯Ό λ΄λ³΄λΌ μ μλ€. κ²°κ³Όμ μΌλ‘ νμ μ 보μ μμ‘΄νλ©° μλ°μ€ν¬λ¦½νΈλ₯Ό λ΄λ³΄λ΄λ νμ μ€ν¬λ¦½νΈ ꡬ문 κΈ°λ₯μ λ°λ²¨ κ°μ νΈλμ€νμΌλ¬μμλ μ§μλμ§ μλλ€.
- const μ΄κ±°ν
- μ€ν¬λ¦½νΈ νμΌ
- λ 립 μ€νν νμ λ΄λ³΄λ΄κΈ°
νλ‘μ νΈμμ νμ μ€ν¬λ¦½νΈκ° μλ λ€λ₯Έ λꡬλ₯Ό μ¬μ©ν΄ μλ°μ€ν¬λ¦½νΈλ‘ λ³ννλ κ²½μ°μλ isolatedModules λ₯Ό νμ±ννλ κ²μ΄ μ’λ€.
allowJS μ»΄νμΌλ¬ μ΅μ μ μλ°μ€ν¬λ¦½νΈ νμΌμ μ μΈλ ꡬ문μ νμ μ€ν¬λ¦½νΈ νμΌμμ νμ κ²μ¬λ₯Ό νλλ‘ νμ©νλ€.
allowJSκ° νμ±νλμ΄ μμ§ μμΌλ©΄ import λ¬Έμ μλ €μ§ νμ μ κ°μ§ λͺ»νλ€.
κΈ°λ³Έμ μΌλ‘ μμμ anyκ° λκ±°λ Could not find a declaration file for module './value' μ κ°μ μ€λ₯κ° λ°μνλ€.
νμ μ€ν¬λ¦½νΈλ λ¨μν μλ°μ€ν¬λ¦½νΈ νμΌμ νμ κ²μ¬ν μ μλλ‘ νμ μ€ν¬λ¦½νΈ νμΌλ‘ λ³ννλ κ² μ΄μμ μνν μ μλ€.
μλ°μ€ν¬λ¦½νΈ νμΌλ νμ κ²μ¬κ° κ°λ₯νλ€. checkJS μ»΄νμΌλ¬ μ΅μ μ λ κ°μ§ μ©λλ‘ μ¬μ©λλ€.
- allowJS μ΅μ μ΄ μμ§ true κ° μλλΌλ©΄ κΈ°λ³Έκ°μ true λ‘ μ€μ νκΈ°
- .js .jsx νμΌμμ νμ κ²μ¬κΈ° νμ±ννκΈ°
checkJS κ° νμ±νλλ©΄ μλ°μ€ν¬λ¦½νΈ νμΌμ μλͺ»λ λ³μλͺ μ λν νμ μ€λ₯κ° λ°μνλ€.
@ts-check μ£Όμμ μ¬μ©νλ©΄ ν΄λΉ μλ°μ€ν¬λ¦½νΈ νμΌμ checkJS μ΅μ μ΄ νμ±ν λλ€.
allowJS μ checkJS κ° νμ±νλλ©΄ νμ μ€ν¬λ¦½νΈ μ½λλ JSDoc μ μλ₯Ό μΈμνλ€.
μ μ λ λ§μ νμ μ€ν¬λ¦½νΈ νλ‘μ νΈλ₯Ό μ§ννκ² λλ©΄μ λ°λ³΅μ μΌλ‘ λμΌν νλ‘μ νΈ μ€μ μ μμ±νλ μμ μ λ°κ²¬νκ² λ κ²μ΄λ€.
λΉλ‘ νμ μ€ν¬λ¦½νΈλ κ΅¬μ± νμΌμ μλ°μ€ν¬λ¦½νΈλ‘ μμ±νκ±°λ import λλ require μ¬μ©μ νμ©νμ§ μμ§λ§
TSConfig νμΌμ΄ λ€λ₯Έ κ΅¬μ± νμΌμμ κ΅¬μ± κ°μ νμ₯νκ±°λ 볡μ¬νλλ‘ μ ννλ λ©μ»€λμ¦μ μ 곡νλ€.
μ§κΈκΉμ§ 보μ¬μ€ νμ μ€ν¬λ¦½νΈ κ΅¬μ± νμΌμ νλ‘μ νΈμ λͺ¨λ μμ€ νμΌμ κ΄λ¦¬νλ€κ³ κ°μ νλ€.
λκ·λͺ¨ νλ‘μ νΈμμλ νλ‘μ νΈμ μλ‘ λ€λ₯Έ μμμμλ‘ λ€λ₯Έ κ΅¬μ± νμΌμ μ¬μ©νλ κ²μ΄ μ μ©ν μ μλ€.
νμ μ€ν¬λ¦½νΈμμλ μ¬λ¬ κ°μ νλ‘μ νΈλ₯Ό ν¨κ» λΉλνλ νλ‘μ νΈ λ νΌλ°μ€ μμ€ν μ μ μν μ μλ€.
λ¨μΌ TSConfig νμΌμ μ¬μ©νλ κ²λ³΄λ€ μ‘°κΈ λ μμ μ΄ λ§μ§λ§ λͺ κ°μ§ ν΅μ¬ μ΄μ μ΄ μλ€.
- νΉμ μ½λ μμμ λν΄ λ€λ₯Έ μ»΄νμΌλ¬ μ΅μ μ μ§μ ν μ μλ€.
- νμ μ€ν¬λ¦½νΈλ κ°λ³ νλ‘μ νΈμ λν λΉλ μΆλ ₯μ μΊμν μ μμΌλ―λ‘ λκ·λͺ¨ νλ‘μ νΈμ λΉλ μκ°μ΄ ν¨μ¬ λΉ¨λΌμ§λ€.
- νλ‘μ νΈ λνΌλ°μ€λ μ½λμ κ°λ³ μμμ ꡬ쑰ννλ λ° μ μ©ν μμ‘΄μ± νΈλ¦¬λ₯Ό μ€ννλ€.
νλ‘μ νΈ λ νΌλ°μ€λ₯Ό νμ±ν μν€κΈ° μν΄ νλ‘μ νΈ μ€μ μ ꡬμΆνλ λ°©λ²μ μκ°νλ€.
- TSConfig μ composite λͺ¨λλ λ€μ€ TSConfig λΉλ λͺ¨λμ μ ν©ν λ°©μμΌλ‘ μλνλλ‘ κ°μ νλ€.
- TSConfig μ references λ TSConfig κ° μμ‘΄νλ λ³΅ν© TSConfig λ₯Ό λνλΈλ€.
- λΉλ λͺ¨λλ λ³΅ν© TSConfig λ νΌλ°μ€λ₯Ό μ¬μ©ν΄ νμΌ λΉλλ₯Ό μ‘°μ νλ€.
composite κ΅¬μ± μ΅μ μ μ νν΄ νμΌ μμ€ν μ λ ₯κ³Ό μΆλ ₯μ΄ μ μ½ μ‘°κ±΄μ μ€μν¨μ λνλΈλ€.
composite μ΄ true μΌ λλ λ€μκ³Ό κ°λ€.
- rootDir μ€μ μ΄ μμ§ λͺ μμ μΌλ‘ μ€μ λμ§ μμλ€λ©΄ κΈ°λ³Έμ μΌλ‘ TSConfig νμΌμ΄ ν¬ν¨λ λλ ν°λ¦¬λ‘ μ€μ λλ€.
- λͺ¨λ ꡬν νμΌμ ν¬ν¨λ ν¨ν΄κ³Ό μΌμμ μΌλ‘ νμΌ λ°°μ΄μ λμ΄λμ΄μΌ νλ€.
- declaration μ»΄νμΌλ¬ μ΅μ μ λ°λμ true μ΄μ΄μΌ νλ€.
μ΄λ¬ν λ³κ²½μ νμ μ€ν¬λ¦½νΈκ° νλ‘μ νΈμ λν λͺ¨λ μ λ ₯ νμΌκ³Ό μΌμΉνλ .d.ts νμΌμ μμ±νλλ‘ κ°μ ν λ μ μ©νλ€.
λν references κ΅¬μ± μ΅μ κ³Ό ν¨κ» μ¬μ©ν λ μ μ©νλ€.
references μ€μ μ΄ μλ λ³΅ν© νμ μ€ν¬λ¦½νΈ νλ‘μ νΈμμ μμ±λ μΆλ ₯μ μμ‘΄ν¨μ λνλΌ μ μλ€.
μ°Έμ‘°λ νλ‘μ νΈμμ λͺ¨λμ κ°μ Έμ€λ κ²μ μΆλ ₯ .d.ts μ μΈ νμΌμμ κ°μ Έμ€λ κ²μΌλ‘ νμ μμ€ν μ νμλλ€.
μ½λ μμμ΄ νλ‘μ νΈ λ νΌλ°μ€λ₯Ό μ¬μ©νλλ‘ νλ² μ€μ νλ©΄ λΉλ λͺ¨λμμ -b λλ --b CLI νλκ·Έλ₯Ό ν΅ν΄ tsc λ₯Ό μ¬μ©ν μ μλ€.
μ΄λ₯Ό ν΅ν΄ tsc λ λ΄μ©κ³Ό νμΌ μΆλ ₯μ΄ λ§μ§λ§μΌλ‘ μμ±λ μκ°μ κΈ°μ€μΌλ‘ λ§μ§λ§ λΉλ μ΄ν λ³κ²½λ νλ‘μ νΈλ§ λ€μ λΉλ νλ€.
- TSConfig μ μ°Έμ‘°λ νλ‘μ νΈλ₯Ό μ°Ύλλ€.
- μ΅μ μνμΈμ§ κ°μ§νλ€.
- μ€λλ νλ‘μ νΈλ₯Ό μ¬λ°λ₯Έ μμλ‘ λΉλνλ€.
- μ 곡λ TSConfig λλ TSConfig μμ‘΄μ±μ΄ λ³κ²½λ κ²½μ° λΉλνλ€.
μ μ₯μμμ νμ μ€ν¬λ¦½νΈ νλ‘μ νΈ λ νΌλ°μ€λ₯Ό μ€μ νλ νΈλ¦¬ν λ°©λ²μ λΉ νμΌ λ°°μ΄κ³Ό μ μ₯μμ λͺ¨λ νλ‘μ νΈ λνΌλ°μ€μ λν λνΌλ°μ€λ₯Ό μ¬μ©ν΄ μ΅μμ λ 벨μ tsconfig.json μ μ€μ νλ κ²μ΄λ€. μ΅μμ TSConfig λ νμ μ€ν¬λ¦½νΈκ° νμΌ μ체λ₯Ό λΉλνλλ‘ μ§μνμ§ μλλ€.
λμ νμμ λ°λΌ μ°Έμ‘°λ νλ‘μ νΈλ₯Ό λΉλνλλ‘ νμ μ€ν¬λ¦½νΈμ μλ¦¬λ €λ μν λ§ νλ€.
{
"files": [],
"references": [
{ "path" : "./packages/core" },
{ "path" : "./packages/shell"}
]
}λΉλ λͺ¨λλ λͺ κ°μ§ λΉλμ νΉνλ CLI μ΅μ μ μ§μνλ€.
- --clean: μ§μ λ νλ‘μ νΈμ μΆλ ₯μ μμ νλ€. (--dry μ ν¨κ» μ¬μ©ν μ μλ€.)
- --dry: μνν μμ μ 보μ¬μ£Όμ§λ§ μ€μ λ‘λ μ무κ²λ λΉλνμ§ μμ΅λλ€.
- --force: λͺ¨λ νλ‘μ νΈκ° μ€λλ κ²μ²λΌ μλνλ€.
- -w λλ --watch: μΌλ°μ μΈ νμ μ€ν¬λ¦½νΈ watch λͺ¨λμ λμΌνλ€.