How to make TS more intelligent?
Luciano Graziani

Luciano Graziani @lgraziani2712

About: I'm an Argentine developer. I like to learn everything, like full stack, ux/dx or svg/animation. I love sports, I do swimming and yoga 🧘🏽‍♂️!

Location:
Argentina
Joined:
Jul 30, 2017

How to make TS more intelligent?

Publish Date: Dec 9 '19
4 4

I have a monorepo like this:

root/packages
  |-lib1
  |-lib2
  |-lib3

lib3 depends of both lib1 and lib2. I'm using TS v3.7.2 with composite (true), baseUrl, paths and references props to be able to work with the new ts project references.

Everything is ok except for one thing: I'm using VSCode, I'm writing something for lib3 and using an enum from lib1, but the enum is still not imported. When I ask VSCode to show me the possible imports for the enum, it doesn't show anything, but if I write the import by hand, it recognize it.

E.g:

file in lib3 where VSCode doesn't know where to import from

export function bla(key: EnumFromLib1) {
  // do something
}

file in lib3 where VSCode know

import {} from 'lib1/some/path/to/file';

export function bla(key: EnumFromLib1) {
  // do something
}

In the second example, if I press the keyboard shorcut for importing EnumFromLib1 it will list the possibility from the lib1/some/path/to/file file.

So, the question is: How can I configure TS to help him know beforehand that I have more elements in those files?

Thank you!

Comments 4 total

  • Dharmen Shah
    Dharmen ShahDec 13, 2019

    I am not sure how to fix that, but for me it's working fine. See attached image.screenshot

    • Luciano Graziani
      Luciano GrazianiDec 13, 2019

      Yep, that works for me too. What I was trying to say is that 3rd party libs (inside node_modules) are not cached or read eagerly, and until you don't import something from the library, you won't have intellisense for that.

      I wanted to know if it was possible to tell vscode to load eagerly some libs (we have a few private packages we use in our apps).

      • Dharmen Shah
        Dharmen ShahDec 14, 2019

        The reason for not loading node modules eagerly:

        #

        This is an intentional performance/helpfulness trade-off.

        We don't eagerly consume all .d.ts files from node_modules - doing so would be prohibitively expensive in a world where there are regularly possible thousands of definition files in node_modules.

        When the Angular .d.ts file isn't consumed, we have no way of knowing that NgModule happens to come from @angular/core, thus can't suggest that auto-import.

        .

        Although, you can achieve it using the way mentioned here:

        Auto complete not working for packages except those under @types folder #30474

        EnixCoda avatar
        EnixCoda commented on Jan 19, 2019
        • VSCode Version: 1.30.2
        • OS Version: macOS v10.13.6

        Auto complete is one of my favorite features of VS code. But sometimes it doesn't provide what I need.

        Steps to Reproduce:

        1. Create a project with create-react-app: npx create-react-app test-auto-complete --typescript
        2. Create a empty file src/test.tsx.
        3. Make sure auto complete works: type isvalid and get following suggestions image Then confirm: image
        4. Install a typed package from npm. (I made one - safe-touch
        5. See if auto complete works for the package(type safe and expect suggestion of safeTouch): image Negative :(
        6. There is a difference between the types file of safe-touch and react. Safe-touch's is directly under node_modules while react's is under node_modules/@types/. Then I tried to make a folder under @types for the package, simply cp -r node_modules/safe-touch node_modules/@types.
        7. See if auto complete works now: image It works! 🎉🎉

        So it seems that VS code is not able to auto complete types of node_modules/[package] even if the package is correctly typed?

        Does this issue occur when all extensions are disabled?: Yes/No No

Add comment