Skip to content

Tùy chọn tsconfig được giải thích

Các tùy chọn tsconfig đáng quan tâm, nhóm theo công việc: siết chặt kiểm tra kiểu, đặt target ngôn ngữ và module, kiểm soát những gì được xuất ra, ánh xạ đường dẫn import, tổ chức build đa dự án và tinh chỉnh các kiểm tra còn lại.

tsconfig cho trình biên dịch biết nên gồm những tệp nào và nghiêm ngặt đến đâu. Hai tùy chọn đảm nhận phần lớn công việc: target đặt mức sinh mã JavaScript, còn strict bật toàn bộ các kiểm tra an toàn trong một lần. Các tùy chọn dưới đây là những cái thực sự thay đổi hành vi; các cờ bật sẵn theo mặc định được ghi chú. Xuất phát từ một cấu hình cơ sở, rồi chỉ override những chỗ khác biệt.

Bảng tham chiếu · 55 mục
55 of 55 rows
Độ nghiêm ngặt
Công tắc tổng: bật strictNullChecks, noImplicitAny và một số cái khác cùng lúc.
Báo lỗi với tham số và biến không thể suy ra kiểu (nếu không sẽ thành any).
null và undefined không còn gán được cho mọi kiểu; bạn phải chọn thêm một cách tường minh.
Kiểm tra tham số hàm theo chiều contravariant; bắt các kiểu tham số callback không an toàn.
Kiểm tra kiểu của bind, call và apply theo tham số được khai báo của hàm.
Báo lỗi khi thuộc tính của lớp không có giá trị khởi tạo và không được gán trong constructor.
Thuộc tính tùy chọn { p?: T } không còn chấp nhận việc gán undefined một cách tường minh.
Yêu cầu từ khóa override trên các thành viên che phủ thành viên của lớp cơ sở.
Báo lỗi với biến cục bộ đã khai báo nhưng không bao giờ được đọc.
Báo lỗi với tham số hàm đã khai báo nhưng không bao giờ được đọc.
Báo lỗi với các câu lệnh biểu thức không có tác dụng gì.
Cấm truy cập bằng dấu chấm với khóa đến từ index signature; hãy dùng ngoặc vuông (obj["key"]).
Báo lỗi khi một đường dẫn mã trả về giá trị nhưng đường dẫn khác thì không.
Báo lỗi khi một case trong switch rơi sang case tiếp theo mà không có break.
Ngôn ngữ và module
Mức sinh mã JavaScript (ví dụ ES2022); target càng mới thì càng ít phải hạ cấp cú pháp.
Các API dựng sẵn khả dụng (ví dụ ES2022, DOM, DOM.Iterable).
Hệ thống module được sinh ra (ví dụ ESNext, CommonJS, NodeNext).
Dùng đúng quy tắc thật của Node: mỗi tệp chọn CJS hay ESM theo package.json gần nhất, và import tương đối cần phần mở rộng tệp.
Cách phân giải đường dẫn import (ví dụ bundler, node, nodenext).
Cách một tệp được coi là module: auto (theo sự hiện diện của import/export), legacy hay force (luôn luôn).
Cho phép kiểu import default từ module CommonJS (mặc định là true trong hầu hết các thiết lập).
Cho phép import default từ module chỉ export giá trị named (chỉ áp dụng ở mức kiểu).
Import được xuất đúng như đã viết; import chỉ chứa kiểu phải dùng import type (TS 5).
Cho phép import tải tệp .json dưới dạng giá trị có kiểu.
Bao gồm các tệp .js làm đầu vào cho quá trình biên dịch.
Cả kiểm tra kiểu cho tệp .js bằng cách đọc chú thích JSDoc; kéo theo allowJs.
Cách .tsx được biên dịch: react-jsx (runtime tự động), react (React.createElement) hay preserve.
Giới hạn các gói @types được tự động bao gồm trong danh sách này; mảng rỗng nghĩa là không gói nào.
Các thư mục được quét tìm gói @types, thay vì mọi node_modules/@types lên phía trên cây.
Đảm bảo mỗi tệp đều có thể chuyển đổi độc lập (bundler và esbuild yêu cầu).
Kết xuất mã
Nơi ghi ra mã JavaScript đã biên dịch.
Gốc của các tệp nguồn; giữ cho hình dạng cây đầu ra ổn định.
Sinh tệp .js.map để trình gỡ lỗi ánh xạ ngược về TypeScript.
Nhúng source map dưới dạng chú thích bên trong tệp .js thay cho tệp .js.map riêng.
Sinh khai báo kiểu .d.ts (cần cho thư viện).
Sinh tệp .d.ts.map để trình soạn thảo nhảy từ khai báo về mã nguồn TypeScript.
Chỉ sinh tệp .d.ts; để JavaScript cho bundler (yêu cầu declaration hoặc composite).
Tái sử dụng các helper như __rest từ tslib thay vì sinh vào mỗi tệp.
Biên dịch đúng for..of, spread và destructuring trên iterable khi target cũ hơn ES2015.
Loại bỏ chú thích khỏi mã JavaScript được xuất ra.
Chỉ kiểm tra kiểu; không ghi tệp nào (dùng khi bundler đảm nhiệm phần kết xuất).
Đường dẫn
Thư mục cơ sở cho việc phân giải module không dùng đường dẫn tương đối.
Ánh xạ tiền tố import đến vị trí, ví dụ { "@/*": ["src/*"] }.
Coi nhiều thư mục như một gốc ảo duy nhất để phân giải đường dẫn.
Cấu trúc dự án
Đánh dấu dự án là có thể build cho project references (bật declaration, incremental).
Phụ thuộc vào các dự án tsconfig khác để build nhanh hơn và tách biệt.
Lưu thông tin build để bỏ qua việc kiểm tra lại các tệp không đổi ở lần chạy sau.
Các kiểm tra khác
Bỏ qua kiểm tra kiểu với tệp .d.ts để tăng tốc (mặc định true).
Báo lỗi khi import không khớp với chữ hoa/thường thực tế của tệp.
Truy cập mảng và chỉ mục trả về T | undefined, không phải T.
Trường của lớp được tạo bằng Object.defineProperty thay vì gán trực tiếp (mặc định true với target ES2022+).
Bật cú pháp decorator kiểu cũ mà các framework cũ dùng (trước chuẩn hóa).
Hiện đầy đủ tên kiểu trong thông báo lỗi thay vì cắt ngắn những cái dài.
Báo lỗi khi import chỉ-tác-dụng trần (import "./x.css") không phân giải ra gì.
Cho phép đường dẫn import kết thúc bằng .ts (yêu cầu noEmit hoặc emitDeclarationOnly).