TypeScript icon indicating copy to clipboard operation
TypeScript copied to clipboard

typeRoots and types not working

Open novaknole opened this issue 4 years ago • 4 comments

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/[email protected]', 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.

novaknole avatar Mar 31 '20 15:03 novaknole

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

sheetalkamat avatar Jul 22 '20 23:07 sheetalkamat

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?

shadow-light avatar Aug 20 '21 12:08 shadow-light

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.

JesseRussell411 avatar Jul 20 '22 00:07 JesseRussell411

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.

maitlandmarshall avatar Aug 10 '22 03:08 maitlandmarshall

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

robertoms99 avatar Oct 28 '22 19:10 robertoms99