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

Mảng và bộ dữ liệu

Trong JavaScript, mảng có thể chứa bất kỳ loại phần tử nào và có thể tăng hoặc giảm linh hoạt. TypeScript bổ sung tính năng kiểm tra kiểu tĩnh để đảm bảo các bộ sưu tập vẫn đồng nhất hoặc tôn trọng cấu trúc kiểu cố định.


Mảng (Bộ sưu tập đồng nhất)

Trong TypeScript, có hai cách tương đương để xác định loại mảng chứa các phần tử cùng loại:

  1. Sử dụng loại phần tử theo sau là dấu ngoặc vuông ([]):

    TS
    const numbers: number[] = [1, 2, 3];
    const strings: string[] = ['a', 'b', 'c'];
  2. Sử dụng loại Array<T> chung:

    TS
    const numbers: Array<number> = [1, 2, 3];

Cả hai cú pháp đều hoàn toàn hợp lệ, nhưng cú pháp đầu tiên (type[]) là kiểu thông thường và phổ biến nhất. Nếu bạn cố gắng chèn một giá trị không hợp lệ (ví dụ: numbers.push("hello") trên mảng number[]), TypeScript sẽ tạo ra lỗi thời gian biên dịch.


Bộ dữ liệu (Mảng có độ dài cố định)

Tuple là một loại mảng đặc biệt có số phần tử cố định trong đó mỗi phần tử có một loại cụ thể được xác định trước dựa trên vị trí của nó.

Ví dụ: để lưu trữ phản hồi HTTP được tạo từ mã trạng thái (số) và thông báo (chuỗi):

TS
const response: [number, string] = [200, 'OK'];

Trong trường hợp này:

  • Phần tử đầu tiên (response[0]) phải là number.
  • Phần tử thứ hai (response[1]) phải là string.
  • Mảng phải được khởi tạo với đúng 2 phần tử.

Bộ dữ liệu chỉ đọc (readonly)

Một chi tiết quan trọng về các bộ dữ liệu trong TypeScript là trong thời gian chạy, chúng là các mảng JavaScript thông thường. Điều này có nghĩa là các phương pháp thay đổi như .push() hoặc .pop() có sẵn về mặt kỹ thuật và có thể thay đổi độ dài bộ dữ liệu, bỏ qua một phần việc kiểm tra loại.

Để ngăn chặn hành vi này và thực thi tính bất biến thực sự, chúng ta có thể sử dụng công cụ sửa đổi readonly:

TS
const point: readonly [number, number] = [10, 20];
// point.push(30); // Compile-time error!

Hãy tự mình thử

Bài tập 1: Mảng số

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

Khai báo một mảng có tên là điểm chỉ chứa các số và được khởi tạo bằng các giá trị 90, 85 và 95. Sử dụng chú thích kiểu rõ ràng cho mảng. Không sử dụng bất kỳ loại nào.

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

Sử dụng cú pháp điểm const: number[] = ... hoặc Array<number>.

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

Bài tập 2: Bộ tọa độ 3D

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

Khai báo một bộ có tên điểm đại diện cho tọa độ 3D (ba số cho X, Y, Z) và được khởi tạo với các giá trị 10, 20, 30. Sử dụng chú thích kiểu rõ ràng.

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

Loại bộ dữ liệu phải là [số, số, số].

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

Bài tập 3: Bộ thông tin vị trí

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

Khai báo một bộ dữ liệu có tên locationInfo đại diện cho tọa độ địa lý bằng tên của nó. Nó phải chứa: vĩ độ (số), kinh độ (số) và tên thành phố (chuỗi). Khởi tạo nó với các giá trị 41,9028, 12,4964 và 'Rome'.

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

Sử dụng cú pháp để xác định một bộ có ba phần tử: [số, số, chuỗi].

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

Bài tập 4: Bộ dữ liệu nhập nhật ký

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

Khai báo một bộ có tên logEntry đại diện cho một dòng nhật ký. Nó phải chứa theo thứ tự: dấu thời gian (số), mức độ nghiêm trọng (chuỗi) và thông báo lỗi (chuỗi). Khởi tạo nó với dấu thời gian 1716300000, cấp 'INFO' và thông báo 'Ứng dụng đã bắt đầu'.

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

Sử dụng cú pháp để xác định bộ ba phần tử: [số, chuỗi, chuỗi] và gán các giá trị được chỉ định.

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