microsoft / microsoft/TypeScript
Contextual inference for nested calls that return constructors
Chưa có ai nhận issue này.
- 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
Mô tả
#54813 attempted to make this work, but exposed an underlying bug that caused too many instantiations. Once that bug is fixed, the code in #54813 should be re-applied if possible.
Here's an example of something that should work, but doesn't:
// @strict: true
// @noEmit: true
interface Action<TContext> {
new (ctx: TContext): void;
}
declare class AssignAction<TContext> {
constructor(ctx: TContext);
}
declare function assign<TContext>(
assigner: (ctx: TContext) => void
): {
new (ctx: TContext): AssignAction<TContext>;
}
declare function createMachine<TContext>(config: {
context: TContext;
entry: Action<TContext>;
}): void;
createMachine({
context: { count: 0 },
entry: assign((ctx) => { ctx }),
});
ctx should have type { count: number }, inferred from the context of assign, but doesn't.
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.
Hướng nghiên cứu
Bắt đầu bằng cách chạy reproduction strict, noEmit được cung cấp và đọc cách tiếp cận đã thử trong #54813. Truy vết lý do các lệnh gọi lồng nhau trả về constructor lại gây ra quá nhiều lần khởi tạo, sau đó xác định liệu có thể áp dụng lại fix đó hay không. Được xem là hoàn tất khi ví dụ suy luận ctx là { count: number } mà không tạo ra các lần khởi tạo dư thừa.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- typescript
- Lĩnh vực
- compilers
- Loại issue
- Lỗi
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 25/100