microsoft / microsoft/TypeScript
tsc and tsserver have different ideas of excessively deep types
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.4k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
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
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con los pasos de reproducción proporcionados para npm install/build y VS Code, y luego compara los diagnósticos de tsc y tsserver. Lee el comportamiento descrito en PR 32079 y en el issue relacionado 29511; el trabajo estará completo cuando ambas herramientas informen de forma coherente del error de tipo «excessively deep» para el mismo proyecto.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- typescript
- Área
- compilers
- Tipo de issue
- Error
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 25/100