TypeScript Null & Không xác định
TypeScript có một hệ thống mạnh mẽ để xử lý các giá trị null
hoặc undefined
.
Theo mặc định, việc xử lý null
và undefined
bị tắt và có thể được bật bằng cách đặt strictNullChecks
thành true.
Phần còn lại của trang này áp dụng khi strictNullChecks
được bật.
Các loại
null
và undefined
là các kiểu nguyên thủy và có thể được sử dụng như các kiểu khác, chẳng hạn như string
.
Ví dụ
let value: string | undefined | null = null;
value = 'hello';
value = undefined;
Hãy tự mình thử » Khi strictNullChecks
được bật, TypeScript yêu cầu phải đặt các giá trị trừ khi undefined
được thêm rõ ràng vào loại.
Chuỗi tùy chọn
Chuỗi tùy chọn là một tính năng JavaScript hoạt động tốt với việc xử lý null của TypeScript. Nó cho phép truy cập các thuộc tính trên một đối tượng, có thể tồn tại hoặc không tồn tại, với một cú pháp nhỏ gọn. Nó có thể được sử dụng với ?.
toán tử khi truy cập các thuộc tính.
Ví dụ
interface House {
sqft: number;
yard?: {
sqft: number;
};
}
function printYardSize(house: House) {
const yardSize = house.yard?.sqft;
if (yardSize === undefined) {
console.log('No yard');
} else {
console.log(`Yard is ${yardSize} sqft`);
}
}
let home: House = {
sqft: 500
};
printYardSize(home); // Prints 'No yard'
Hãy tự mình thử »Sự hợp nhất Nullish
Nullish Coalhood là một tính năng JavaScript khác cũng hoạt động tốt với việc xử lý null của TypeScript. Nó cho phép viết các biểu thức có dự phòng cụ thể khi xử lý null
hoặc undefined
. Điều này rất hữu ích khi các giá trị giả khác có thể xuất hiện trong biểu thức nhưng vẫn hợp lệ. Nó có thể được sử dụng với ??
toán tử trong một biểu thức, tương tự như sử dụng toán tử &&
.
Ví dụ
function printMileage(mileage: number | null | undefined) {
console.log(`Mileage: ${mileage ?? 'Not Available'}`);
}
printMileage(null); // Prints 'Mileage: Not Available'
printMileage(0); // Prints 'Mileage: 0'
Hãy tự mình thử » Được chứng nhận!
$45 ĐĂNG KÝ
Xác nhận không có giá trị
Hệ thống suy luận của TypeScript không hoàn hảo, đôi khi nên bỏ qua khả năng một giá trị là null
hoặc undefined
. Một cách dễ dàng để thực hiện việc này là sử dụng tính năng truyền, nhưng TypeScript cũng cung cấp !
toán tử như một phím tắt thuận tiện.
Ví dụ
function getValue(): string | undefined {
return 'hello';
}
let value = getValue();
console.log('value length: ' + value!.length);
Hãy tự mình thử »Cũng giống như việc truyền, thao tác này có thể không an toàn và cần được sử dụng cẩn thận.
Xử lý giới hạn mảng
Ngay cả khi bật strictNullChecks
, theo mặc định, TypeScript sẽ cho rằng quyền truy cập mảng sẽ không bao giờ trả về không xác định (trừ khi không xác định là một phần của loại mảng).
Cấu hình noUncheckedIndexedAccess
có thể được sử dụng để thay đổi hành vi này.
Ví dụ
let array: number[] = [1, 2, 3];
let value = array[0]; // with `noUncheckedIndexedAccess` this has the type `number | undefined`
Hãy tự mình thử »