Kiểu dữ liệu nguyên thủy

Trong JavaScript, có hai loại kiểu dữ liệu: kiểu dữ liệu nguyên thủy (Primitive data types) và kiểu dữ liệu đối tượng (Object types).

Kiểu dữ liệu nguyên thủy bao gồm: boolean, number, string, null, undefined và các kiểu mới như Symbol trong ES6 và BigInt trong ES10.

Phần này tập trung giới thiệu 5 kiểu dữ liệu nguyên thủy đầu tiên trong TypeScript.

Kiểu boolean

Kiểu boolean là kiểu dữ liệu cơ bản nhất, trong TypeScript, chúng ta sử dụng boolean để định nghĩa kiểu dữ liệu boolean:

let isDone: boolean = false;
 
// Biên dịch thành công
// Mặc định, các đoạn mã không nhắc đến lỗi biên dịch được cho là biên dịch thành công

Lưu ý, việc sử dụng hàm tạo Boolean để tạo đối tượng không phải là kiểu boolean:

let createdByNewBoolean: boolean = new Boolean(1);
 
// Type 'Boolean' is not assignable to type 'boolean'.
//   'boolean' là một kiểu nguyên thủy, trong khi 'Boolean' là một đối tượng bọc. Ưu tiên sử dụng 'boolean' khi có thể.

Thực tế, new Boolean() trả về một đối tượng Boolean:

let createdByNewBoolean: Boolean = new Boolean(1);

Việc gọi trực tiếp Boolean cũng có thể trả về một kiểu boolean:

let createdByBoolean: boolean = Boolean(1);

Trong TypeScript, boolean là kiểu dữ liệu cơ bản trong JavaScript, trong khi Boolean là hàm tạo kiểu dữ liệu trong JavaScript. Các kiểu dữ liệu cơ bản khác (ngoại trừ nullundefined) cũng tương tự và không được bàn thêm chi tiết.

Kiểu Number

Sử dụng number để định nghĩa kiểu dữ liệu số:

let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
// Cách biểu diễn số nhị phân trong ES6
let binaryLiteral: number = 0b1010;
// Cách biểu diễn số bát phân trong ES6
let octalLiteral: number = 0o744;
let notANumber: number = NaN;
let infinityNumber: number = Infinity;

Kết quả biên dịch:

var decLiteral = 6;
var hexLiteral = 0xf00d;
// Cách biểu diễn số nhị phân trong ES6
var binaryLiteral = 10;
// Cách biểu diễn số bát phân trong ES6
var octalLiteral = 484;
var notANumber = NaN;
var infinityNumber = Infinity;

Trong đó, 0b10100o744 là [cách biểu diễn số nhị phân và bát phân trong ES6][ES6 中的二进制和八进制表示法], chúng sẽ được biên dịch thành số thập phân.

Kiểu string

Sử dụng string để định nghĩa kiểu dữ liệu chuỗi:

let myName: string = 'Tom';
let myAge: number = 25;
 
// Chuỗi mẫu
let sentence: string = `Xin chào, tôi là ${myName}.
Tôi sẽ tròn ${myAge + 1} tuổi vào tháng sau.`;

Kết quả biên dịch:

var myName = 'Tom';
var myAge = 25;
// Chuỗi mẫu
var sentence = "Xin chào, tôi là " + myName + ".\nTôi sẽ tròn " + (myAge + 1) + " tuổi vào tháng sau.";

Ở đây, ` được sử dụng để định nghĩa [chuỗi mẫu trong ES6][ES6 中的模板字符串], và ${expr} được sử dụng để nhúng biểu thức trong chuỗi mẫu.

Kiểu void

JavaScript không có khái niệm kiểu Void. Trong TypeScript, có thể sử dụng void để chỉ ra một hàm không trả về giá trị nào:

function alertName(): void {
    alert('Tên của tôi là Tom');
}

Việc khai báo một biến kiểu void không có ý nghĩa gì, bởi vì bạn chỉ có thể gán nó bằng undefined hoặc null (chỉ khi —strictNullChecks không được chỉ định):

let unusable: void = undefined;

Kiểu Null và Undefined

Trong TypeScript, có thể sử dụng nullundefined để định nghĩa hai kiểu dữ liệu cơ bản này:

let u: undefined = undefined;
let n: null = null;

Sự khác biệt giữa voidundefinednull là chúng là con của tất cả các kiểu. Điều này có nghĩa là biến kiểu undefined có thể gán cho biến kiểu number:

// Không có lỗi
let num: number = undefined;
// Cũng không có lỗi
let u: undefined;
let num: number = u;

Trong khi biến kiểu void không thể gán cho biến kiểu number:

let u: void;
let num: number = u;
 
// Type 'void' is not assignable to type 'number'.