Sự khác nhau giữa các câu lệnh này (giao diện vs loại) là gì?Loại bản ghi: Giao diện so với các loại
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
Sự khác nhau giữa các câu lệnh này (giao diện vs loại) là gì?Loại bản ghi: Giao diện so với các loại
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
Theo TypeScript Language Specification:
Không giống như một lời tuyên bố giao diện, mà luôn luôn giới thiệu một loại đối tượng được đặt tên, một tuyên bố loại bí danh có thể giới thiệu tên cho bất kỳ loại loại, bao gồm nguyên thủy, công đoàn, và các loại giao lộ.
Các đặc điểm kỹ thuật tiếp tục đề cập đến:
loại giao diện có nhiều điểm tương đồng để gõ bí danh cho loại đối tượng literals, nhưng kể từ khi loại giao diện cung cấp nhiều khả năng họ đang thường ưa thích để gõ bí danh. Ví dụ, các loại giao diện
interface Point { x: number; y: number; }
có thể được viết như kiểu bí danh
type Point = { x: number; y: number; };
Tuy nhiên, làm như vậy có nghĩa là khả năng sau đây sẽ bị mất:
- Một giao diện có thể được có tên trong một mệnh đề mở rộng hoặc thực hiện, nhưng một bí danh loại cho một kiểu đối tượng theo nghĩa đen thì không thể.
- Giao diện có thể có nhiều khai báo được hợp nhất, nhưng không thể có bí danh loại cho loại đối tượng theo nghĩa đen.
https://www.typescriptlang.org/docs/handbook/advanced-types.html
Một khác biệt là giao diện tạo ra một cái tên mới được sử dụng ở khắp mọi nơi. Nhập bí danh không tạo tên mới - ví dụ: thông báo lỗi sẽ không sử dụng tên bí danh.
"Nhiều khai báo được hợp nhất" có nghĩa là gì trong sự khác biệt thứ hai? – jrahhali
@jrahhali Tôi nghĩ rằng kịch bản * tăng cường * trong [chủ đề SO này] (http://stackoverflow.com/questions/36782896/in-typescript-what-is-the-difference-between-type-and-interface) câu trả lời câu hỏi của bạn – superjos
@jrahhali nếu bạn xác định giao diện hai lần, các kiểu nhập sẽ hợp nhất chúng thành một. –