Chuyển đến nội dung chính
Mô-đun 7 · Bài học 2 trong tổng số 214/14 trong khóa học~15 min
Bài học theo mô-đun (2/2)

Tuyên bố và sáp nhập

Các tệp khai báo loại (có phần mở rộng .d.ts) được sử dụng trong TypeScript để mô tả hình dạng của mã JavaScript hiện có mà không triển khai bất kỳ logic thực tế nào. Chúng chỉ chứa các định nghĩa kiểu, giao diện và chữ ký hàm.

Những tệp này rất cần thiết khi sử dụng thư viện của bên thứ ba được viết bằng JavaScript thuần túy.


Tuyên bố sáp nhập

Hợp nhất khai báo là một hành vi trong đó trình biên dịch hợp nhất hai hoặc nhiều khai báo riêng biệt được khai báo có cùng tên thành một định nghĩa duy nhất.

Trường hợp phổ biến nhất là hợp nhất giao diện:

TS
interface User {
  name: string;
}

interface User {
  age: number;
}

// The resulting User interface has both name and age properties!
const student: User = {
  name: 'Alice',
  age: 23,
};

Nếu các thuộc tính có cùng tên thì chúng phải cùng loại, nếu không TypeScript sẽ báo lỗi.


Sửa đổi các mô-đun toàn cầu và bên ngoài

Chúng ta có thể sử dụng việc hợp nhất khai báo để mở rộng các giao diện được xác định trong các mô-đun khác hoặc trong phạm vi toàn cục.

Ví dụ: nếu chúng ta muốn thêm một thuộc tính vào đối tượng window toàn cầu của trình duyệt:

TS
declare global {
  interface Window {
    analyticsToken: string;
  }
}

Bằng cách sử dụng declare global, chúng tôi thông báo cho TypeScript rằng chúng tôi đang đưa chữ ký mới vào giao diện Window toàn cầu hiện có.


Hãy tự mình thử

Bài tập 1: Hợp nhất khai báo cơ bản

tập thể dục#ts.m7.l2.e1
Nỗ lực: 0Đang tải…

Trong TypeScript, các giao diện có cùng tên trong cùng phạm vi sẽ được tự động hợp nhất. Khai báo một giao diện Người dùng với tên thuộc tính: chuỗi, sau đó trong khối thứ hai khai báo giao diện tương tự Người dùng thêm thuộc tính age: number. Cuối cùng, khai báo một hằng số user kiểu User với các giá trị phù hợp.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Khai báo giao diện Người dùng hai lần, chèn các thuộc tính tương ứng, sau đó gán các trường cho đối tượng người dùng.

Giải pháp khả dụng sau 3 lần thử

Bài tập 2: Mở rộng giao diện cửa sổ toàn cầu

tập thể dục#ts.m7.l2.e2
Nỗ lực: 0Đang tải…

Hãy tưởng tượng bạn muốn mở rộng giao diện Window toàn cầu để thêm một thuộc tính tùy chỉnh có tên config thuộc loại Record<string, string>. Viết khai báo chính xác bằng cách sử dụng khai báo toàn cục để hợp nhất thuộc tính mới vào giao diện Window toàn cục.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng khai báo toàn cầu { giao diện Window { config: Record<string, string>; } }.

Giải pháp khả dụng sau 3 lần thử