Sử dụng `export` trong tệp` d.ts` có hợp lý không?
Tôi đang cố gắng tạo tệp cho các loại được sử dụng toàn cầu xung quanh ứng dụng của mình.
reduxState.d.ts
declare namespace MyProject {
type Type1 = someType;
interface SomeInterface {
someProperty: someType
}
}
Với đoạn mã trên, tôi đã có thể thấy namespacecác thành viên của tôi và của nó có sẵn trên các tệp dự án của tôi.
Vì vậy, sự khác biệt giữa mã trên và mã sau, sử dụng exportcho các namespacethành viên là gì?
declare namespace MyProject {
export type Type1 = someType;
export interface SomeInterface {
someProperty: someType
}
}
Cả hai dường như hoạt động tốt. Sự khác biệt là gì?
Từ: https://www.typescriptlang.org/docs/handbook/namespaces.html#namespacing
Bởi vì chúng tôi muốn các giao diện và lớp ở đây có thể nhìn thấy bên ngoài không gian tên, chúng tôi mở đầu chúng bằng cách xuất.
Trong phần trích dẫn này từ DOC, có vẻ như họ đang đề cập đến một namespaceđược khai báo trong a tschứ không phải một d.tstệp. Đó là lý do tại sao bạn cần exporttrong trường hợp đó?
Nó có ý nghĩa gì khi sử dụng exporttrong một d.tstệp không?
Trả lời
*.d.tstệp là để định nghĩa, chúng hoàn toàn bị bỏ qua trong thời gian chạy. Nếu bạn viết mã JS vì bạn có một thư viện hoặc thứ gì đó, thì tôi thực sự khuyên bạn nên sử dụng từ khóa export, vì điều này giúp người dùng khác dễ dàng nhìn thấy những gì họ có thể sử dụng từ mã của bạn (điều mà bạn không xuất khẩu, rõ ràng không thể nhập khẩu ở nơi khác).
Bây giờ trường hợp sử dụng của bạn: Mọi thứ được xuất từ một bảng tên, đều có thể được sử dụng bên ngoài một cách độc lập. Có nghĩa là bạn có thể làm điều gì đó như
const obj: MyProject.SomeInterface = { someProperty: 20 };
Vì bạn đang sử dụng *.d.tstệp chứ không phải *.tstệp, nó sẽ không tạo ra bất kỳ sự khác biệt nào cho bạn miễn là bạn chỉ xuất giao diện, vì chúng sẽ bị bỏ qua bất kỳ lúc nào khi biên dịch.
Một lưu ý cuối cùng: Các *.d.tstệp giúp bạn có thể xem nội dung của mình trong toàn bộ dự án của mình nhưng nếu bạn định nhập các chức năng hoặc tương tự từ đó, trước tiên bạn cần phải nhập chúng một cách rõ ràng.