microsoft / microsoft/TypeScript

jsconfig.json gives broken intellisense for js files with module.exports

Open
#33,435 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Awaiting More Feedback Suggestion
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
2d 4h
Merged PRs (30d)
132

Description

  • VSCode Version: 1.38.0
  • TS Version: 3.6.2
  • OS Version: Ubuntu 18.04 LTS bionic beaver
  • Tested with no extensions
  • Can not really find a solution to this problem after a lot of searching

I have a personal js library that I use both in browser-side and node-side for a lot of my personal projects . In fact the library itself has its own project . The js library looks like this :

const library = {};

library.foo = function() {/*browser code*/}

if (typeof module === 'object') {
 library.bar = function() {/*node code*/}
 module.exports = library;
}

For a browser project (library is used via script tag) If I try to get intellisense via jscofig.json for such a file I get broken intellisense (by typing f or b I get suggestions for foo or bar respectively , but there is no library suggestion when I type l , and even if I type library I get no suggestion about its properties ) .
For a node project everything works fine regarding intellisense using require .

The issue here is with module.exports . If I change it to var substitute = module; substitute.exports = library; then I get intellisense for browser project via jsconfig.json but broken intellisense (as described before) for node via require .

How can I get intellisense to work for both require and jsconfig.json ?

Before you attempt to check intellisense you should know the following :

I open index.js in a project that does not have any other js file and no jsconfig.json file . Then I view in the same VScode session some other , completely unrelated to my project , js files . For whatever file I view I get intellisense (of the globally scoped variables that have been defined via let , var or const) when I am editing index.js . If the unrelated js file happens to have module.exports then the intellisense that I get in index.js for that file is broken like it has been described before .
I stop getting intellisense for files that I view when I create a jsconfig.json file file in the folder of index.js . But still there is the same broken behavior with intellisense for files that are included via jsconfig.json and have module.exports .

Please restart vscode to test if intellisense really works .

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the behavior in VSCode 1.38.0 with TypeScript 3.6.2 using the shown index.js, jsconfig.json, browser usage, and Node require usage. Compare IntelliSense for direct module.exports with the substitute alias, and consider the issue done when both jsconfig.json and require provide the library and its properties consistently.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, typescript, vscode
Domain
developer-experience, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.