microsoft / microsoft/TypeScript
Lib dependencies are transitive
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
Description
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:
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par le dépôt de reproduction et comparez ses dossiers attendus et réels avec TypeScript 3.8.3. Lisez les exemples tsconfig.json et index.ts, puis examinez les issues associées #33111, #35656 et #15732. Le travail est terminé lorsqu’il est déterminé si les références transitives aux déclarations devraient supprimer les erreurs signalées concernant Object.values et BigInt, et que ce comportement est documenté ou corrigé.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100