Repository: TypeScript
Issue: (JSDoc, JavaScript) Imported class types by require() are unresolved
Labels: Needs Investigation

Type: <b>Bug</b>

<!-- ⚠️⚠️ Do Not Delete This! bug_report_template ⚠️⚠️ -->
<!-- Please read our Rules of Conduct: https://opensource.microsoft.com/codeofconduct/ -->
<!-- 🕮 Read our guide about submitting issues: https://github.com/microsoft/vscode/wiki/Submitting-Bugs-and-Suggestions -->
<!-- 🔎 Search existing issues to avoid creating duplicates. -->
<!-- 🧪 Test using the latest Insiders build to see if your issue has already been fixed: https://code.visualstudio.com/insiders/ -->
<!-- 💡 Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. -->
<!-- 🔧 Launch with `code --disable-extensions` to check. -->
Does this issue occur when all extensions are disabled?: Yes

<!-- 🪓 If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. -->
<!-- 📣 Issues caused by an extension need to be reported directly to the extension publisher. The 'Help > Report Issue' dialog can assist with this. -->
- VS Code version: Code 1.93.1 (38c31bc77e0dd6ae88a4e9cc93428cc27a56ba40, 2024-09-11T17:20:05.685Z)
- OS version: Linux x64 6.5.0-44-generic

Steps to Reproduce:

With source code below (`a.js` & `b.js`), there are two issues present in `b.js`, A and B.
1. Issue.B is triggered without modification. 
    TS server reports `a.Foo` as alias of class Foo, but `Foo` as unresolved.
2. Issue.A is triggered if any of `value`/`obj` field or `prop` getter line is enabled in `a.js` exports.
    TS server reports `a.Foo` as unresolved.
    The only pattern to make TS server happy is `localObj` line.

IMO diagnostics information should be presented other than the casual `/* unresolved */ any` message.

```
// a.js
class Foo {
    constructor() {
        this.fprop = 123;
    }
}
const localObj = { prop: 456 };

exports = module.exports = {
    Foo,
    // value: 123,
    // obj: { prop: 456 },
    // get prop() { return 789 },
    // localObj,
};
```
```
// b.js
const a = require('./a');
const { Foo, } = a;

class Bar {
    /** @param {a.Foo} foo */
    constructor(foo) {
        this.bprop = foo.fprop;
    }
}

// Issue.A: a.Foo unresolved, .fprop is any
/** @param {a.Foo} foo */
function bar1(foo) {
    foo.fprop;
}

// Issue.B: Foo unresolved, .fprop is any
/** @param {Foo} foo */
function bar2(foo) {
    foo.fprop;
}
```


VS Code version: Code 1.93.1 (38c31bc77e0dd6ae88a4e9cc93428cc27a56ba40, 2024-09-11T17:20:05.685Z)
OS version: Linux x64 6.5.0-44-generic
Modes:

<details>
<summary>A/B Experiments</summary>

```
vsliv368:30146709
vspor879:30202332
vspor708:30202333
vspor363:30204092
vscoreces:30445986
vscod805cf:30301675
binariesv615:30325510
vsaa593:30376534
py29gd2263:31024239
c4g48928:30535728
azure-dev_surveyone:30548225
a9j8j154:30646983
962ge761:30959799
pythongtdpath:30769146
welcomedialogc:30910334
pythonnoceb:30805159
asynctok:30898717
pythonregdiag2:30936856
pythonmypyd1:30879173
2e7ec940:31000449
pythontbext0:30879054
accentitlementst:30995554
dsvsc016:30899300
dsvsc017:30899301
dsvsc018:30899302
cppperfnew:31000557
dsvsc020:30976470
pythonait:31006305
dsvsc021:30996838
9c06g630:31013171
pythoncenvpt:31062603
a69g1124:31058053
dvdeprecation:31068756
dwnewjupyter:31046869
impr_priority:31102340
refactort:31101459
ccplti:31098112

```

</details>

<!-- generated by issue reporter -->