microsoft / microsoft/TypeScript
tsc and tsserver have different ideas of excessively deep types
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Go
- Star
- 111k
- Fork
- 14.3k
- Merge trung bình
- 2 ngày 4 giờ
- Pull request đã merge (30 ngày)
- 132
Mô tả
TypeScript Version:
typescript-3.6.0-insiders.20190725
Taken from,
https://github.com/microsoft/TypeScript/pull/32028#issuecomment-515234327
Search Terms:
max instantiation count, max instantiation depth, tsc, tsserver
Code
I've reduced the 40-subproject monorepo to just small parts of 2 subprojects.
Here is a snippet of the problem,
/**
*
* ```json
* //tsconfig-base.json
* "disableSourceOfProjectReferenceRedirect": true,
* ```
*
* ```json
* //package.json
* "typescript": "https://typescript.visualstudio.com/cf7ac146-d525-443c-b23c-0d58337efebc/_apis/build/builds/37759/artifacts?artifactName=tgz&fileId=2A7E3F3E93DD6F833D63A63F3A7A21707B3F57B08FCA5C93A8F1848556D8141F02&fileName=/typescript-3.6.0-insiders.20190725.tgz"
* ```
*
* -----
*
* VS Code: OK!
* Type inference OK!
*
* -----
*
* `tsc` gives me,
*
* ```js
* src/blah.ts:11:21 - error TS2589: Type instantiation is excessively deep and possibly infinite.
*
* 11 export const json = tm.deepMerge(
* ~~~~~~~~~~~~~
* 12 base.json,
* ~~~~~~~~~~~~~~
* ...
* 31 s.convertBlahType.toStr.BLAH
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* 32 );
* ~
* ```
*/
export const json = tm.deepMerge(
/*snip*/
);
const x = json("", "");
if (x.foo != undefined) {
if (x.foo.bar != undefined) {
//Correctly infers `string`
//So, 14M type instantiations is okay with VS code
x.foo.bar.baz
}
}
Expected behavior:
If tsc gets the error,
TS2589: Type instantiation is excessively deep and possibly infinite.
Then tsserver should also get the error
Actual behavior:
tsc gets the error, but tsserver does not (or at least VS code infers the type correctly without errors)
Playground Link:
-None-
@sheetalkamat
The project involved contains code related to a company project.
So, I really do not want to upload it publicly, if possible.
I could mangle the variable names so that they're meaningless but if I can just email the parts of the project that are involved, that would be nice.
Repro steps:
npm installnpm run build- See
TS2589: Type instantiation is excessively deep and possibly infinite. - Open VS code
- Navigate to file
tscsays contains errors - Notice no errors
- Play with return type of function
- Notice inference works correctly
Related Issues:
The merged PR that introduced the error,
https://github.com/microsoft/TypeScript/pull/32079#issuecomment-515334873
The build I am testing,
https://github.com/microsoft/TypeScript/pull/32028
Also relevant, https://github.com/microsoft/TypeScript/issues/29511
It seems like every few versions, there ends up being a difference between tsc and tsserver, regarding the max instantiation depth
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 với các bước tái hiện được cung cấp cho npm install/build và VS Code, sau đó so sánh các chẩn đoán từ tsc và tsserver. Đọc hành vi được thảo luận trong PR 32079 và issue liên quan 29511; công việc hoàn tất khi cả hai công cụ đều nhất quán báo lỗi kiểu excessively deep cho cùng một dự án.
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
- Cần làm rõ
- Mức phù hợp với người mới
- 25/100