Non-exported classes in type declaration files leaking value names
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 30/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- typescript
- Lĩnh vực
- compilers
Hướng nghiên cứu
Tái hiện hành vi bằng cách sử dụng các ví dụ classes.d.ts, test.js và test.ts trong issue, sau đó theo dõi quá trình phân giải module và symbol của các tệp khai báo trong TypeScript compiler. Công việc được xem là hoàn tất khi class A không được export không bị lộ ra dưới dạng value, trong khi các tham chiếu kiểu cần thiết bởi class B được export vẫn tiếp tục được phân giải, với độ bao phủ hồi quy cho cả hai ví dụ.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
TypeScript Version: 3.5.2
Search Terms: ambient module declaration export declare class type name
Code
In a file called classes.d.ts:
declare class A {}
export declare class B extends A {}
In a file called test.js:
let a = require('classes').A;
In a file called test.ts:
import { A } from './types/classes';
[NEW] Assumptions:
The following is a list of assumptions I had when originally opening this issue:
- Type Declaration Files work like modules: once you use
importorexport[on a top-level declaration], only explicitlyexported declarations are visible externally. - Type names declared in a Declaration File are always accessible via
importtypes (at least those that are used byexported types.- E.g.
export class B extends Aexports the type namesAandB, even ifAwas not directlyexported.
- E.g.
- Value names declared in a module-style Declaration File (see
#1above) are only accessible if explicitlyexported.
These assumptions are the result of reading the documentation and working with declaration files. Note that the documentation does not mention:
- All declarations in a declaration file are implicitly exported.
- Special [and undocumented?]
export {};syntax causes only explicitlyexported declarations to be available by consumers of the declaration file.
I list them here to provide context for the Expected Behavior section.
Expected behavior:
In both cases , an Error that name 'A' could be found in module 'classes'.
I expect in this case that TypeScript is capable of resolving the following from the declaration file:
In other words, I should be able to use import types to resolve class A, but attempts to use them should fail.
Actual behavior:
No compiler error in either case. TypeScript-powered IDEs (e.g. VSCode) happily show that the full non-exported class A is available.
In short, a non-exported, declared class should resolve in the same way as an interface.
As things stand today, TypeScript erroneously resolves the Value "A".
Playground Link: NA
Related Issues: NA
- Ngôn ngữ chính
- Go
- Star
- 111k
- Fork
- 14.4k
- Merge trung bình
- 1 ngày 19 giờ
- Pull request đã merge (30 ngày)
- 117
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của microsoft/TypeScript
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
microsoft/TypeScript#64322 · 2 bình luận · 1 reaction · 2 người được giao ·
-
Possible Improvement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
microsoft/TypeScript#64278 · 1 bình luận · 1 reaction ·
-
Docs
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
microsoft/TypeScript#64118 · 1 bình luận ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
microsoft/TypeScript#64094 ·
-
Docs
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
microsoft/TypeScript#63959 · 5 bình luận ·
Tất cả issue của microsoft/TypeScript
Issue tương tự
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 92/100
milvus-io/birdwatcher#545 ·
-
kind/bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
kubernetes-sigs/prow#953 · 1 bình luận ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
caddyserver/caddy#8046 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
jaegertracing/jaeger#9588 ·