Tôi gặp một chút khó khăn khi tìm bất kỳ tài liệu rõ ràng hoặc giải thích cho mối quan hệ dường như đặc biệt giữa lớp TypeScript và giao diện có cùng tên.Mối quan hệ giữa một lớp TypeScript và một giao diện có cùng tên
- Ý nghĩa của giao diện có cùng tên với lớp học là gì?
- Tại sao một lớp chia sẻ tên của nó với giao diện tự động triển khai giao diện đó?
- Tại sao trình biên dịch phàn nàn về việc triển khai getter của tôi trong trường giao diện chỉ đọc khi lớp và giao diện có cùng tên, nhưng chấp nhận việc triển khai nếu các tên khác nhau?
- Có tài liệu chuẩn nào đề cập đến những câu hỏi này không?
Code:
// Co-named interface and class doesn't like readonly property implementation:
interface Foo {
readonly x: number; // Error: Duplicate identifier 'x'
y: number;
}
class Foo {
get x(): number { // Error: Duplicate identifier 'x'
return 0;
}
y = 1;
}
// Same as above, but different class name + explicit `implements`
class Bar implements Foo {
get x(): number { // No error!
return 0;
}
y = 1;
}
// Duplicating the first example, but explicitly implementing the co-named interface:
interface Baz {
readonly x: number; // Error: Duplicate identifier 'x'
y: number;
}
class Baz implements Baz {
get x(): number { // Error: Duplicate identifier 'x'
return 0;
}
y = 1;
}
Cảm ơn. Đã đăng một vấn đề để có được một số làm rõ về lý do tại sao trình biên dịch phàn nàn theo cách này: https://github.com/Microsoft/TypeScript/issues/14882 –