0

any, unknown, never - Specific Types trong TypeScript | TypeScript Series

Hiểu dễ dàng về “Specific Types” trong TypeScript

Khi mới học TypeScript, ta thường biết đến các kiểu cơ bản như:

string, number, boolean, array, object

Nhưng ngoài những kiểu này, TypeScript còn có một nhóm kiểu đặc biệt (special types) giúp bạn xử lý các trường hợp “lạ” – ví dụ:

  • Dữ liệu chưa biết là kiểu gì
  • Hàm không bao giờ trả về
  • Biến có thể là null hoặc undefined

Nếu hiểu rõ và dùng đúng, bạn sẽ viết code an toàn, ít lỗi, và dễ đọc hơn rất nhiều.


1. any – Kiểu “tự do vô đối”

any nghĩa là “bất cứ kiểu gì cũng được”.

TypeScript sẽ không kiểm tra lỗi kiểu cho biến đó.

Ví dụ:

let x: any = 5;
x = "Hello";      // OK
x = { a: 1 };     // OK
x.toUpperCase();  // OK (nhưng có thể lỗi khi chạy)

Khi nào dùng:

  • Khi bạn đang chuyển từ JavaScript sang TypeScript và chưa biết rõ kiểu dữ liệu.
  • Khi bạn cần xử lý dữ liệu rất linh hoạt (ví dụ dữ liệu đến từ API mà bạn chưa định nghĩa rõ).

Lời khuyên:

👉 Dùng any tạm thời thôi.

Về lâu dài, hãy cố gắng thay bằng unknown hoặc kiểu rõ ràng hơn.


2. unknown – Giống any nhưng an toàn hơn

unknown cũng có thể chứa bất kỳ giá trị nào — nhưng bạn phải kiểm tra kiểu trước khi sử dụng.

Điều này giúp tránh lỗi khi chạy chương trình.

Ví dụ:

let data: unknown = "Xin chào";

if (typeof data === "string") {
  console.log(data.toUpperCase()); // OK vì đã kiểm tra kiểu
}

data = 123;
// console.log(data.toUpperCase()); ❌ Lỗi — chưa kiểm tra kiểu

Khi nào dùng:

  • Khi nhận dữ liệu từ bên ngoài (API, form nhập liệu, JSON, v.v.) mà chưa biết chắc kiểu là gì.

Lời khuyên:

👉 Nếu không cần quá linh hoạt, hãy dùng unknown thay cho any.

Nó giúp TypeScript bảo vệ bạn khỏi lỗi kiểu sai.


3. never – Kiểu “không bao giờ xảy ra”

never dùng cho:

  • Hàm không bao giờ trả về (ví dụ: luôn ném lỗi, hoặc chạy vô tận).
  • Trường hợp mà giá trị “không thể tồn tại”.

Ví dụ 1 – Hàm ném lỗi:

function throwError(message: string): never {
  throw new Error(message);
}

Ví dụ 2 – Kiểm tra hết các trường hợp:

type Shape = "circle" | "square";

function getArea(shape: Shape) {
  switch (shape) {
    case "circle":
      return 10;
    case "square":
      return 20;
    default:
      const neverCase: never = shape; // Nếu có case mới, thiếu case trong switch → báo lỗi
  }
}

Lời khuyên:

👉 never hữu ích khi bạn muốn đảm bảo đã xử lý hết tất cả tình huống trong một switch hoặc union type.


4. nullundefined – Kiểu “không có gì”

  • undefined: biến đã khai báo nhưng chưa được gán giá trị.
  • null: biến được gán rõ ràng là “không có giá trị”.

Ví dụ:

let a: undefined = undefined;
let b: null = null;

let name: string | null = null;
name = "Albert";

Tùy chọn trong TypeScript:

Nếu bạn bật strictNullChecks: true (trong tsconfig.json),

TypeScript sẽ yêu cầu bạn xử lý rõ ràng các trường hợp nullundefined.

Ví dụ thực tế:

function greet(name?: string) {
  console.log(`Hello, ${name ?? "stranger"}`);
}

(?? là toán tử “nullish coalescing” – nếu namenull hoặc undefined, dùng "stranger" thay thế.)

Lời khuyên:

👉 Luôn bật strictNullChecks để tránh lỗi kiểu khi biến không có giá trị.


Tóm tắt nhanh

Kiểu Ý nghĩa Khi nên dùng
any Bỏ qua kiểm tra kiểu Khi tạm thời chưa biết kiểu dữ liệu
unknown Giống any nhưng an toàn hơn Khi dữ liệu đến từ bên ngoài
never Không bao giờ có giá trị Khi hàm không trả về hoặc kiểm tra hết các trường hợp
null / undefined Không có giá trị / chưa được gán Khi biến hoặc thuộc tính có thể trống

Lời khuyên thực tế

  • ✅ Bật strict: true trong tsconfig.json.
  • 🚫 Hạn chế dùng any, chỉ dùng khi thật cần.
  • ✅ Ưu tiên unknown nếu dữ liệu không rõ kiểu.
  • ✅ Dùng never trong switch để tránh quên xử lý trường hợp mới.
  • ✅ Luôn xử lý nullundefined rõ ràng.

Kết luận

Những “kiểu đặc biệt” này là vũ khí bí mật giúp TypeScript mạnh mẽ hơn JavaScript rất nhiều.

Hiểu và dùng đúng any, unknown, never, null, undefined sẽ giúp bạn viết code:

  • An toàn hơn
  • Dễ đọc hơn
  • Và ít lỗi “khó tìm” hơn.

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí