Type và interface trong TypeScript
Trong TypeScript, ngoài các kiểu dữ liệu cơ bản (string
, number
, boolean
, v.v.), chúng ta có thể định nghĩa kiểu tùy chỉnh bằng type
và interface
. Điều này giúp mã nguồn rõ ràng, dễ bảo trì và mở rộng hơn.

1. type
trong TypeScript
type
được sử dụng để định nghĩa kiểu dữ liệu tùy chỉnh. Có thể dùng type
để:
- Định nghĩa kiểu đối tượng.
- Tạo kiểu kết hợp (
Union
&Intersection
). - Định nghĩa kiểu cho hàm.
1.1. Định nghĩa kiểu đối tượng
type User = {
name: string;
age: number;
isAdmin: boolean;
};
let user1: User = {
name: "Alice",
age: 25,
isAdmin: false,
};
1.2. Sử dụng type
với Union (kiểu kết hợp)
Có thể sử dụng |
(Union) để tạo kiểu tùy chỉnh có thể nhận nhiều giá trị khác nhau.
type Status = "pending" | "in-progress" | "completed";
let currentStatus: Status = "pending";
// currentStatus = "done"; // ❌ Lỗi: Type '"done"' is not assignable to type 'Status'.
1.3. Sử dụng type
với Intersection (gộp kiểu)
Dùng &
để kết hợp nhiều kiểu lại với nhau.
type Person = {
name: string;
age: number;
};
type Employee = {
company: string;
position: string;
};
type Developer = Person & Employee;
let dev: Developer = {
name: "Bob",
age: 30,
company: "Tech Corp",
position: "Software Engineer",
};
2. interface
trong TypeScript
interface
cũng được sử dụng để định nghĩa kiểu đối tượng, nhưng có một số đặc điểm khác so với type
.
2.1. Định nghĩa kiểu đối tượng
interface User {
name: string;
age: number;
isAdmin: boolean;
}
let user2: User = {
name: "Charlie",
age: 28,
isAdmin: true,
};
2.2. Thêm thuộc tính tùy chọn (?
)
Có thể sử dụng ?
để khai báo một thuộc tính không bắt buộc.
interface Product {
name: string;
price: number;
description?: string; // Thuộc tính không bắt buộc
}
let item: Product = {
name: "Laptop",
price: 1000,
};
2.3. Kế thừa interface (extends
)
Một interface
có thể kế thừa một hoặc nhiều interface
khác.
interface Animal {
name: string;
}
interface Dog extends Animal {
breed: string;
}
let pet: Dog = {
name: "Buddy",
breed: "Golden Retriever",
};
2.4. Interface cho hàm
Có thể sử dụng interface
để định nghĩa kiểu của một hàm.
interface MathOperation {
(a: number, b: number): number;
}
const add: MathOperation = (x, y) => x + y;
console.log(add(5, 10)); // Output: 15
3. So sánh type
và interface
Đặc điểm | type |
interface |
---|---|---|
Định nghĩa kiểu đối tượng | ✅ Có thể | ✅ Có thể |
Hỗ trợ Union & Intersection |
✅ Có thể dùng ` | & &` |
Kế thừa | ❌ Không có extends (chỉ có Intersection) |
✅ Hỗ trợ extends |
Có thể dùng cho hàm | ✅ Có thể | ✅ Có thể |
Dễ mở rộng | ❌ Không thể mở rộng thêm sau khi khai báo | ✅ Có thể mở rộng bằng cách khai báo lại |
4. Khi nào nên dùng type
và interface
?
Trường hợp | Nên dùng |
---|---|
Khi cần định nghĩa kiểu cho một đối tượng đơn giản | type hoặc interface |
Khi cần kế thừa từ nhiều interface khác nhau | interface |
Khi cần **Union (` | ) hoặc Intersection ( &`)** |
Khi cần định nghĩa kiểu cho một hàm | type hoặc interface |
Ví dụ, nếu chỉ cần định nghĩa một đối tượng đơn giản:
interface Person {
name: string;
age: number;
}
Nhưng nếu cần kết hợp nhiều kiểu dữ liệu khác nhau:
type Employee = Person & { company: string };
Tổng kết
-
type
được dùng để định nghĩa kiểu dữ liệu tùy chỉnh, hỗ trợ Union (|
) và Intersection (&
). -
interface
chủ yếu dùng để định nghĩa đối tượng, có thể mở rộng (extends
). - Nếu cần kết hợp nhiều kiểu (
Union
), nên dùngtype
. - Nếu cần mở rộng và kế thừa, nên dùng
interface
.

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.
Xem thêm

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.
Liên hệ công việc qua email dưới đây.
lhvuctu@gmail.com