tsconfig.json asoslari — strict va muhim sozlamalar

~15 daq · TypeScript · Kirish

tsc --init bilan yaratilgan tsconfig.json da yuzlab sozlama bor — aksariyati izohlab o'chirilgan. Hammasi bir vaqtda kerak emas. Lekin bir nechtasini tushunmasdan TypeScript ni to'g'ri ishlatib bo'lmaydi.


tsconfig.json tuzilmasi

{
  "compilerOptions": {
    // sozlamalar
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}

compilerOptions — kompilyator qanday ishlashini belgilaydi. include — qaysi fayllar kompilyatsiya qilinadi. exclude — qaysi papkalar o'tkazib yuboriladi.


Eng muhim sozlama — strict

{
  "compilerOptions": {
    "strict": true
  }
}

strict: true — TypeScript ning to'liq kuchini yoqadi. Bu bitta sozlama bir nechta tekshiruvni birga yoqadi:

strictNullChecks — null va undefined bilan ishlashni tekshiradi. Bu eng muhimi.

// strict: false (sozlanmagan)
let ism: string = null; // ← ruxsat beriladi, lekin xavfli

// strict: true
let ism: string = null;
// ❌ Type 'null' is not assignable to type 'string'

noImplicitAny — tur aniqlanmagan joyda any chiqarishni taqiqlaydi.

// strict: false
function salomlash(ism) { // ← ism = any, TypeScript jim turadi
  return ism.toUpperCase();
}

// strict: true
function salomlash(ism) {
// ❌ Parameter 'ism' implicitly has an 'any' type

Hayotiy o'xshatma

Yangi xodim keldi. Strict rejim — "hamma qoidaga rioya qil". Non-strict — "xohlaganingni qil". Qoidalar ko'proq bog'laydi, lekin xatolar kamayadi. strict: true — qoidalarni maksimal qilish.


target — qaysi JavaScript versiyasiga o'girish

{
  "compilerOptions": {
    "target": "ES2020"
  }
}

TypeScript ni qaysi JavaScript versiyasiga aylantirishini belgilaydi. Qiymatlar: ES5, ES6/ES2015, ES2020, ES2022, ESNext.

// TypeScript da
const sonlar = [1, 2, 3];
const [birinchi, ...qolganlar] = sonlar;

// target: "ES5" ga o'girilganda:
var sonlar = [1, 2, 3];
var birinchi = sonlar[0], qolganlar = sonlar.slice(1);

// target: "ES2020" ga o'girilganda:
const sonlar = [1, 2, 3];
const [birinchi, ...qolganlar] = sonlar; // o'zgarmaydi

Eski brauzerlarni qo'llab-quvvatlash kerak bo'lsa — ES5. Zamonaviy muhit uchun — ES2020 yoki ESNext.


outDir — JavaScript fayllar qayerga yozilsin

{
  "compilerOptions": {
    "outDir": "./dist"
  }
}

Belgilanmasa — .ts fayl yonida .js yaratiladi. Bu aralashib ketadi. outDir: "./dist" bilan — barcha .js fayllar dist/ papkasiga yig'iladi.

Sozlanmagan:          outDir: "./dist" bilan:
src/
  index.ts            src/
  index.js   ←          index.ts
  utils.ts            dist/
  utils.js   ←          index.js
                        utils.js

rootDir — TypeScript fayllar qayerda

{
  "compilerOptions": {
    "rootDir": "./src",
    "outDir": "./dist"
  }
}

rootDir — TypeScript fayllarning bosh papkasi. outDir bilan birga ishlatilganda papka tuzilmasi saqlanadi:

src/utils/string.ts  →  dist/utils/string.js
src/index.ts         →  dist/index.js

module — modul tizimi

{
  "compilerOptions": {
    "module": "CommonJS"   // Node.js uchun
    // yoki
    "module": "ESNext"     // brauzer / Vite / modern Node.js uchun
  }
}

Node.js loyihalari uchun — "CommonJS". Vite yoki zamonaviy frontend uchun — "ESNext".


Minimal ishlaydigan tsconfig.json

Yangi loyiha uchun yaxshi boshlanish nuqtasi:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "CommonJS",
    "rootDir": "./src",
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

esModuleInterop: true — import express from "express" ko'rinishida CommonJS modullarni import qilish uchun. Yo'q bo'lsa — import * as express from "express" deyish kerak bo'ladi.

forceConsistentCasingInFileNames: true — Windows va Linux da fayl nomlari katta-kichik harf farqini bir xil saqlash.


Tez-tez uchraydigan xatolar

strict: false bilan boshlash:

Ko'pchilik "keyin qo'shaman" deydi — lekin qo'shilganda yuzlab xato chiqadi. Boshidanoq strict: true bilan boshlash to'g'riroq.

outDir belgilamaslik:

src/
  index.ts
  index.js  ← tsc yaratdi, aralashib ketdi

Har doim outDir: "./dist" qo'shing.

include yo'q — barcha fayllar kompilyatsiya qilinadi:

node_modules ichidagi fayllar ham tekshirilishi mumkin. include: ["src/**/*"] bilan faqat kerakli papkani belgilang.


Xulosa

tsconfig.json — TypeScript kompilyatorining sozlama fayli. Eng muhim sozlamalar:

  • strict: true — to'liq tekshiruv, har doim yoqing
  • target — qaysi JavaScript versiyasiga o'girish
  • outDir — kompilyatsiya natijalari qayerga ketsin
  • rootDir — TypeScript fayllar qayerda
  • module — Node.js uchun CommonJS, brauzer uchun ESNext

Keyingi dars

5-dars: string, number, boolean — asosiy turlar