TopGit
Đánh giá repo GitHub

DefinitelyTyped: kho @types cho TypeScript

DefinitelyTyped/DefinitelyTyped
DTopGit review image for DefinitelyTyped/DefinitelyTyped
Review by Topgit.dev for DefinitelyTyped/DefinitelyTyped, with GitHub repository stats and README context.
Nhận định nhanh

DefinitelyTyped là kho mã nguồn cộng đồng cung cấp type definitions cho các thư viện JavaScript không có sẵn file kiểu riêng, phân phối qua các package `@types` trên npm. Dùng ngay khi `npm install` một thư viện JS thuần khiến TypeScript báo lỗi đỏ khắp nơi. Bỏ qua nếu thư viện đó đã tự đóng gói type hoặc vốn viết bằng TypeScript.

Sao
★ 51.4k
Fork
⑂ 30.3k
Ngôn ngữ
TypeScript
Giấy phép
Xem trong repo
Chủ đề
Automation
Cập nhật
Oct 2026
Trang chủ
—
GitHub

Thách thức của việc định kiểu cho package npm

Một phần lớn npm ra đời trước cả TypeScript, và nhiều tác giả thư viện chẳng có hứng thú học cú pháp declaration file để tự viết type. TypeScript không thể định kiểu cho thứ nó không thấy. Nếu không có một nơi tập trung, mọi dự án phụ thuộc vào package chưa có type sẽ phải tự viết `declare module` riêng — lặp lại đúng một kiểu đoán mò ở hàng ngàn codebase khác nhau. DefinitelyTyped gom hết việc đoán mò đó vào một kho được review, thay vì để nó rải rác khắp nơi.

DefinitelyTyped cung cấp những gì

DefinitelyTyped là một monorepo chứa file khai báo kiểu TypeScript, mỗi package npm một thư mục riêng, publish lên npm dưới scope `@types` — cài `@types/node` là lấy ngay type cho `node`. Mỗi package có file `index.d.ts` kèm file test được dtslint kiểm tra kiểu, không chạy, để khai báo luôn khớp với thực tế.

Cách kho định nghĩa kiểu này hoạt động

  • ✓Tổ chức thành một pnpm monorepo duy nhất — mỗi thư viện một thư mục `types/<package>`, theo cấu trúc mới mà README nói đã thay đổi gần đây.
  • ✓Type của mỗi package đi qua dtslint, chạy TypeScript compiler trên các file `.d.ts` và kiểm tra assertion `$ExpectType` / `@ts-expect-error` trong file test.
  • ✓`@arethetypeswrong/cli` (`attw`) so sánh field `exports`/`type` trong `package.json` của package với bản implementation thật trên npm để bắt lỗi lệch CJS/ESM; các lỗi đã biết được ghi trong `attw.json`.
  • ✓`tsconfig.json` của mọi package bắt buộc bật `noImplicitAny`, `noImplicitThis`, `strictNullChecks`, `strictFunctionTypes`, và không được bật `esModuleInterop` hay `allowSyntheticDefaultImports`.
  • ✓PR đi qua một bot (`dt-bot`) tự động tag đúng owner của package, giúp review gần như tự phục vụ.
  • ✓Package `@types` có dist-tag npm riêng cho các bản TypeScript cũ hơn — ví dụ README đưa ra: `ts2.5` và `ts2.7` trỏ tới hai phiên bản type react khác nhau.
Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao ↗

Đóng góp và cập nhật định nghĩa kiểu

Fork rồi clone repo — repo khá lớn nên README khuyên dùng 'blobless clone' qua `git clone --filter=blob:none` để khỏi tải hết blob ngay từ đầu. Cài Node, rồi chạy `pnpm install`; có thể giới hạn chỉ một package bằng `pnpm install -w --filter "{./types/foo}..."` thay vì cài cả workspace. Sửa file `.d.ts` cùng file `<package>-tests.ts` tương ứng, rồi chạy `pnpm test <package>` để kiểm tra trước khi mở PR. Package mới bắt đầu từ `npx dts-gen --dt --name <my-package> --template module`, lệnh này tự sinh `index.d.ts`, file test, `tsconfig.json` và `package.json`. Khi một thư viện bắt đầu tự đóng gói type riêng, gỡ bản trên DefinitelyTyped bằng `pnpm run not-needed <typingsPackageName> <asOfVersion>`, lệnh này publish một bản stub trỏ sang phiên bản mới.

Khung hỗ trợ phiên bản TypeScript

  • △README chỉ nói repo test trên các bản TypeScript dưới 2 năm tuổi — bản compiler cũ hơn phải dựa vào dist-tag npm chứ không có gì đảm bảo.
  • △TypeScript 1.x không được phân phối qua dist-tag. README bảo phải tự tải file `.d.ts` từ nhánh `master`, và nói rõ hai kênh phân phối cũ là Typings và NuGet đã bị deprecated.
  • △Không có thông tin license trong dữ liệu được cung cấp ở đây — cần kiểm tra trực tiếp trên repo trước khi giả định điều kiện sử dụng.
  • △Quy tắc đóng góp khá chặt: PR không xuất phát từ nhu cầu sử dụng thật sẽ bị đóng vì là 'make-work,' còn PR do coding agent tạo bị giới hạn một PR, phải gắn tag `[auto-generated]`.
  • △Đây là một monorepo lớn. Chạy `pnpm install` đầy đủ sẽ kéo theo dependency của mọi package, nên README khuyên người mới dùng blobless clone và cài có filter.
Xem trên GitHub ↗

Khi thư viện tự đóng gói kiểu riêng

Type declaration do chính thư viện đóng gói — khi tác giả viết thẳng bằng TypeScript, hoặc sinh file `.d.ts` từ JSDoc, rồi publish qua field `types` trong `package.json` của họ, bạn bỏ qua DefinitelyTyped hoàn toàn. README cũng khuyên tác giả thư viện làm vậy thay vì publish lên DT.Tự viết ambient declaration (`declare module "libname" { ... }`) ngay trong dự án — README dùng chính cách này để test một định nghĩa trước khi đóng góp, và nó cũng là phương án dự phòng hợp lý cho package quá hiếm để bao giờ lên được DefinitelyTyped.

Câu hỏi thường gặp

Làm sao để cài type definitions từ DefinitelyTyped?

Chạy `npm install --save-dev @types/<package-name>` để lấy type definitions của package đó từ DefinitelyTyped. Với package có scope, bỏ ký tự `@` và thêm hai dấu gạch dưới — `@babel/preset-env` thành `@types/babel__preset-env`. TypeScript sẽ tự nhận type ngay sau khi cài.

PR trên DefinitelyTyped mất bao lâu để được merge?

README của DefinitelyTyped không nêu thời gian cố định để merge một PR. Repo mô tả quy trình review dựa trên bot, tự phục vụ, trong đó `dt-bot` tự động tag owner liên quan, còn thời gian merge thực tế phụ thuộc vào việc owner đó phản hồi nhanh hay chậm.

Có thể dùng DefinitelyTyped với TypeScript 1.x không?

Type trên DefinitelyTyped cho TypeScript 1.x không được phân phối qua dist-tag npm. README hướng dẫn tự tải file `.d.ts` từ nhánh `master` của repo — hai kênh phân phối cũ là Typings và NuGet đều đã bị deprecated.

Khác nhau giữa package @types và type được đóng gói sẵn là gì?

Package `@types` là file khai báo được duy trì riêng trong repo DefinitelyTyped, dành cho thư viện chưa tự viết type. Type đóng gói sẵn là file `.d.ts` do chính tác giả thư viện viết và publish trong package của họ — README của DefinitelyTyped khuyên tác giả viết TypeScript làm đúng như vậy.

Làm sao gỡ type khỏi DefinitelyTyped khi thư viện đã tự có type riêng?

Chạy `pnpm run not-needed <typingsPackageName> <asOfVersion> [<libraryName>]` trong repo DefinitelyTyped. Lệnh này publish một bản stub cho tên `@types` đó ở phiên bản chỉ định, báo hiệu bản trên DefinitelyTyped đã ngừng dùng để nhường chỗ cho type do thư viện tự đóng gói.

Vì sao đóng góp của tôi trên DefinitelyTyped bị đóng?

DefinitelyTyped chỉ nhận PR xuất phát từ việc bạn thực sự dùng type đó trong dự án của mình — README gọi PR không có động lực rõ ràng là 'make-work' và đóng lại, ai lặp lại nhiều lần có thể bị block. PR do coding agent tạo còn cần gắn tag `[auto-generated]` và chỉ được gửi tối đa một PR.

Trường hợp sử dụng tốt nhất

  • •Định kiểu cho một package npm chỉ có JS bằng cách cài `@types/<package>` thay vì tự viết `declare module`.
  • •Đối chiếu dist-tag của package `@types` với bản TypeScript cũ bạn đang kẹt lại, theo đúng bảng version-tag mà README đưa ra ví dụ cho react.
  • •Gửi PR sửa một type sai hoặc thiếu ở package bạn đang thực sự dùng — đúng tiêu chí README nêu để PR được chấp nhận.
  • •Gỡ type của một package bằng `not-needed` khi thư viện gốc bắt đầu tự đóng gói declaration riêng.

Ai nên dùng — và ai nên bỏ qua

Dev TypeScript đang dùng một package JS thuần không có type sẵn nên kiểm tra DefinitelyTyped trước — cài package `@types` thường nhanh hơn tự viết ambient declaration. Bỏ qua việc đóng góp nếu bạn là tác giả thư viện và đã viết bằng TypeScript; README khuyên bạn tự đóng gói file `.d.ts` sinh ra thay vì publish lên đây. Coding agent muốn cày PR hàng loạt vào repo này cũng nên bỏ qua — README từ chối thẳng kiểu làm việc đó và giới hạn đóng góp tự động ở một PR duy nhất, phải được người dùng xác nhận.

Repo liên quan

Nguồn & ghi công

Thông tin và trích dẫn lấy từ repo GitHub DefinitelyTyped (github.com/DefinitelyTyped/DefinitelyTyped) và README của repo.

Dữ liệu GitHub · đồng bộ lần cuối 14 thg 8, 2026Đánh giá bởi Henry
← Về TopGit

Muốn nghe thêm một ý kiến về DefinitelyTyped?

Hỏi một AI đọc được trang này — một cú bấm là có ngay nhận định về DefinitelyTyped.

GitHub