microsoft / microsoft/TypeScript
Resolving hoisted `typeRoots` paths
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.4k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
TypeScript Version: 3.6.2
Search Terms:
- resolve typeRoots in parent package node_modules
- sharing tsconfig in yarn workspaces
- use hoisted tsconfig in child package
Code
I've set up a Lerna monorepo which uses Yarn Workspaces. Within this monorepo is a config package, which other packages depend on. This config package has @types/node and @types/jest as dependencies.
From sibling packages, the shared config is used like so:
{
"extends": "@project/config/ts.json",
"include": ["src", "tests"],
"compilerOptions": {
"outDir": "lib"
}
}
In the shared config, I point to the appropriate types root:
{
"compilerOptions": {
// ...
"typeRoots": ["node_modules/@types"]
}
}
However, within the shared config package, @types/* have been hoisted from the local node_modules to the monorepo's top-level node_modules. This behavior is usually fine given node's resolution... but it seems the config does not resolve to its parent's node_modules.
Expected behavior:
For the specified type root to resolve to the parent's node_modules
Actual behavior:
Tests fail with messages such as Cannot find name 'describe'. Do you need to install type definitions for a test runner? ...
One workaround:
{
"compilerOptions": {
// ...
"typeRoots": ["../../node_modules/@types"]
}
}
This workaround isn't very clean. Lerna & Yarn definitely pose some complexity for type root resolution. Hopefully resolving parents is considered a worthwhile modification.
Please let me know. Thank you :)
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
Reproduisez la configuration de Lerna et Yarn Workspaces avec TypeScript 3.6.2 ou typescript@next, en utilisant typeRoots de la configuration partagée et la configuration extends du package frère. Commencez par suivre la manière dont le chemin relatif node_modules/@types est résolu depuis la configuration partagée, puis vérifiez que les définitions de types du package parent hoistées sont trouvées et que les erreurs describe manquantes ne se produisent plus.
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