microsoft / microsoft/TypeScript
Lib dependencies are transitive
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: 3.8.3
Search Terms: lib target dependencies triple-slash
Code
I have a reproduction repository at https://github.com/astorije/repro-tsc-lib-issue.
Essentially, consider the following code:
console.log(Object.values({ foo: BigInt(42) }));
Object.values is a ES2017 feature, and BigInt is a ES2020.
Also consider the target is tsconfig.json is es2015, and lib is either not specified or simply contains es2015 and dom.
Expected behavior:
Given the code and the TS configuration above, the type checker should always fails with:
index.ts:2:20 - error TS2339: Property 'values' does not exist on type 'ObjectConstructor'.
2 console.log(Object.values({ foo: BigInt(42) }));
~~~~~~
index.ts:2:34 - error TS2304: Cannot find name 'BigInt'.
2 console.log(Object.values({ foo: BigInt(42) }));
~~~~~~
And if you only have typescript as a dependency in package.json, that is indeed what you'll get. So far, so good. See the expected folder of my repro repo.
Actual behavior:
If you have a (direct or indirect) dependency to @types/node, or if any dependency contains a declaration file that has /// <reference lib="es2018" />, /// <reference lib="es2020.bigint" />, etc., the type checker will now stop reporting these errors. See the actual folder of my repro repo.
This seems significant to me because it means that dependencies can silence potential browser incompatibilities. If I specified a target of es2015, with no extra lib, Babel transpiling, or polyfills, I should not be able to compile the code above.
Is there something obvious I'm missing? I realize it's the very design of libbut as explained in #15732, that assumes the project uses polyfills, which is not something that can be enforced/checked by a third-party library at compile time.
Related Issues:
Apologies for the vagueness of the search terms. It's significant enough that it must already exist in an issue or a StackOverflow question, but after spending some time looking, I did not find anything similar.
The only issues that seem somewhat related, but different:
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 el repositorio de reproducción y compara sus carpetas esperadas y reales usando TypeScript 3.8.3. Lee los ejemplos de tsconfig.json e index.ts y después revisa las issues relacionadas #33111, #35656 y #15732. Se considera terminado determinar si las referencias transitivas a declaraciones deberían silenciar los errores reportados de Object.values y BigInt, y documentar o corregir ese comportamiento.
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
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100