Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

typeRoots and types not working #37708

Closed
novaknole opened this issue Mar 31, 2020 · 5 comments · Fixed by #51715
Closed

typeRoots and types not working #37708

novaknole opened this issue Mar 31, 2020 · 5 comments · Fixed by #51715
Assignees
Labels
Fix Available A PR has been opened for this issue Needs Investigation This issue needs a team member to investigate its status. Rescheduled This issue was previously scheduled to an earlier milestone

Comments

@novaknole
Copy link

novaknole commented Mar 31, 2020

TypeScript Version: 3.8.3

Code
This is my tsconfig.json

{
    "compilerOptions": {
        "typeRoots": [
            "./typings"
        ],
        "types": ["Phaser"]  
    }    
}

In my project root, I got package.json, package-lock.json, main.ts(empty one), tsconfig.json.

tsconfig.json contains the above code.

typings folder which I wrote in typeRoots is empty.

After that, I run the following command in terminal:tsc --traceResolution

The idea is I am trying to use Phaser as a global variable in my main.ts file.

Bug 1)

Expected behavior:

What should happen is Phaser shouldn't get resolved because compiler should start looking into my custom folder typings.

Actual behavior:
Somehow it still gets resolved. And this is what it prints: Type reference directive 'Phaser' was successfully resolved to '/Applications/XAMPP/xamppfiles/htdocs/phaser-test/node_modules/Phaser/types/phaser.d.ts' with Pac kage ID 'phaser/types/phaser.d.ts@3.22.0', primary: false. .

I don't know how it finds it since in my typeRoots, I don't have node_modules specified.

What I have tried:

I tried to exclude node_modules folder, I thought maybe they still get compiled and that's why this happens, but I couldn't make exclude work.

"exclude": ["node_modules/*"]

"exclude": ["./node_modules/*"]

"exclude": ["./node_modules"]

but none of these worked. , but i don't think that will help because i created one file test.ts and put something like this in there, but compilation is successful, So I guess the bug is related to typeRoots.

let a:number = 10;
a="gio";

Bug 2)

Let's change the above tsconfig.json to the following:

     "compilerOptions": {
        "typeRoots": [
            "./node_modules/phaser/types",
        ],
        "types": ["Phaser"]  
    },

What should happen now is Phaser should be resolved from ./node_modules/phaser/types and not take care of anything else such as trying to find package.json in node_modules/phaser and looking at types property in that package.json. But what actually happens is this doesn't get resolved at all on Ubuntu versions, since ubuntu is 'case-sensitive. This config works fine on OS x and windowsbecausePhasergets resolved fromnode_modules/phaser/package.json's types propertywhich shouldn't be happening because of mytypeRoots`.

Basically both things are so much related to each other.

@RyanCavanaugh RyanCavanaugh added the Needs Investigation This issue needs a team member to investigate its status. label Apr 3, 2020
@RyanCavanaugh RyanCavanaugh added this to the TypeScript 4.0 milestone Apr 3, 2020
sheetalkamat added a commit that referenced this issue Jul 22, 2020
sheetalkamat added a commit that referenced this issue Jul 22, 2020
@sheetalkamat
Copy link
Member

This will probably be breaking change and will be part of broader work to improve type reference directive resolution

@shadow-light
Copy link

I have @types/node installed in top level dir, and a tsconfig.json for a sub-component in a subdir with "types": [] and "typeRoots": [] but node types are still loaded in my browser app (__dirname etc). This seems to contradict what the docs say:

By default all visible ”@types” packages are included in your compilation. Packages in node_modules/@types of any enclosing folder are considered visible. For example, that means packages within ./node_modules/@types/, ../node_modules/@types/, ../../node_modules/@types/, and so on. If typeRoots is specified, only packages under typeRoots will be included.

https://www.typescriptlang.org/tsconfig#typeRoots

I assume this is the same issue?

@JesseRussell411
Copy link

JesseRussell411 commented Jul 20, 2022

I'm working on a web app and have @types/node installed from a transient dependency. I have types set to an empty array in compiler options and it still uses the node types.

@maitlandmarshall
Copy link

I'm working on a web app and have @types/node installed from a transient dependency. I have types set to an empty array in compiler options and it still uses the node types.

I'm also experiencing the same problem.

@robertoms99
Copy link

robertoms99 commented Oct 28, 2022

same problem with @types/node, I can use process.env in a client app

sheetalkamat added a commit that referenced this issue Dec 1, 2022
…ectory when its not default typeRoots

Fixes #37708
Bug 2 part of the issue
sheetalkamat added a commit that referenced this issue Dec 1, 2022
sheetalkamat added a commit that referenced this issue Dec 1, 2022
…ectory when its not default typeRoots

Fixes #37708
Bug 2 part of the issue
sheetalkamat added a commit that referenced this issue Dec 1, 2022
@sheetalkamat sheetalkamat added the Fix Available A PR has been opened for this issue label Dec 2, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Fix Available A PR has been opened for this issue Needs Investigation This issue needs a team member to investigate its status. Rescheduled This issue was previously scheduled to an earlier milestone
Projects
None yet
8 participants