Skip to main content
Bạn đang xem tài liệu Inertia.js v2. Inertia.js v3 đã được phát hành và hiện là phiên bản mặc định. Hãy xem hướng dẫn nâng cấp để bắt đầu.
Inertia hỗ trợ TypeScript ở mức first-class. Bạn có thể cấu hình kiểu toàn cục bằng declaration merging và truyền generic vào hook cũng như phương thức router để có props, form và quản lý state type-safe.

Sử dụng pnpm

Do cơ chế cô lập dependency nghiêm ngặt của pnpm, @inertiajs/core không truy cập được tại node_modules/@inertiajs/core. Thay vào đó, package nằm lồng trong .pnpm/, khiến TypeScript module augmentation không thể resolve module. Bạn có thể khắc phục bằng cách cấu hình pnpm để hoist package. Thêm cấu hình sau vào file .npmrc rồi chạy pnpm install.
Hoặc bạn có thể thêm @inertiajs/core làm dependency trực tiếp của project.

Cấu hình toàn cục

Bạn có thể cấu hình type của Inertia trên toàn cục bằng cách augment interface InertiaConfig trong module @inertiajs/core. Việc này thường được thực hiện trong file global.d.ts ở thư mục root hoặc thư mục types của project.
Câu lệnh import (hoặc export {}) là bắt buộc để biến file này thành module. Nếu thiếu nó, declare module sẽ thay thế định nghĩa module thay vì augment module. tsconfig.json cũng phải include các file .d.ts, vì vậy hãy đảm bảo mảng include có pattern như "resources/js/**/*.d.ts".

Shared page props

Tùy chọn sharedPageProps định nghĩa kiểu dữ liệu được chia sẻ với mọi trang trong ứng dụng. Với cấu hình này, page.props.authpage.props.appName sẽ có kiểu chính xác ở mọi nơi.

Flash data

Tùy chọn flashDataType định nghĩa kiểu của flash data trong ứng dụng.

Giá trị lỗi

Mặc định, giá trị validation error có kiểu string. Bạn có thể cấu hình TypeScript để nhận mảng thay thế khi dùng nhiều lỗi trên mỗi field.
Phiên bản tiếp theo của Laravel Wayfinder có thể tự động sinh các type này bằng cách phân tích ứng dụng Laravel. Nó sinh TypeScript type cho shared props, page props, form request và Eloquent model. Phiên bản này hiện đang ở giai đoạn beta.

Page component

Bạn có thể khai báo type cho kết quả import.meta.glob để tăng type safety khi resolve page component.

Page props

Bạn có thể khai báo kiểu cho prop riêng của từng trang bằng cách truyền generic vào usePage(). Chúng được gộp với sharedPageProps toàn cục, nhờ đó bạn có autocomplete và type checking cho cả dữ liệu shared lẫn dữ liệu riêng của trang.

Form helper

Form helper nhận generic type parameter để đảm bảo type-safe cho form data và error handling. Điều này cung cấp autocomplete cho field và error, đồng thời ngăn lỗi chính tả trong tên field.

Dữ liệu lồng nhau và mảng

Form type hỗ trợ đầy đủ object lồng nhau và mảng. Bạn có thể truy cập và cập nhật field lồng nhau bằng dot notation, còn error key sẽ tự động có kiểu tương ứng.

Ghi nhớ state

Hook useRemember nhận generic type parameter để lưu local state an toàn kiểu, cung cấp autocomplete và đảm bảo giá trị khớp với kiểu mong đợi.

Khôi phục state

Phương thức router.restore() nhận generic để khai báo kiểu cho state được khôi phục từ history.

Router request

Các phương thức router nhận generic để khai báo kiểu cho request data, giúp type checking dữ liệu được gửi đi.

Flash data theo scope

Phương thức router.flash() nhận generic để khai báo kiểu cho flash data riêng theo trang hoặc section, tách biệt với cấu hình flashDataType toàn cục.

Client-side visits

Các phương thức router.push()router.replace() nhận generic để khai báo kiểu cho prop của client-side visit.

Tài liệu chính thức

Bài dịch này được đối chiếu từ tài liệu Inertia.js v2 chính thức. Nếu có khác biệt do phiên bản hoặc cập nhật mới, hãy ưu tiên tài liệu chính thức làm nguồn tham chiếu.