microsoft / microsoft/TypeScript

TS with .js files and JSDoc: type is found, displayed and used - despite "TS2304: Cannot find name XYZ"

Offen
#31,131 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

checkJs Domain: JSDoc Needs Investigation
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.4k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

TS 3.4.5, Webstorm 2019.1.1, node v11.14.0, Linux

Project: .ts files in src/, transpiled using Babel to lib/, but files under test/ are .js files

tsconfig.json has allowJs and checkJs set to true in order to check the .js files under test/ — which (CommonJS) require(...) transpiled .js files from lib/ (there also are .d.ts and .d.ts.map files for all files).

Every single TS type declared in src/ has an accompanying JSDoc @typedef (don't know if that is important or if TS does not even use it since there is the original TS type too).

The problem I see is a weird one, because what Typescript says and what it actually does is completely opposite!

In the IDE I see every single type declared in src/ files as read, and on mouseover I get TS2304 Cannot find name "XYZ".:

Unbenannt-1

However, and this is the weird part (1 of 2): It all works!

Showing the type (in WebStorm, CTRL plus mouse-hover over a symbol, shows the correct information. Even on those red types, I get the type name and the file name of where it is declared. Variables show the correct autocompletion suggestions and type information, jumping to the type definition (the TS one) works too.

The other weird part (2 of 2) is that when I follow the suggestions to change e.g.

 * @param {SHA256Hash} hash

to

 * @param {import('../lib/core-types.js').SHA256Hash} hash

the symbols are no longer red — but now nothing works. No more type information or anything. (Tried different import paths, also directly to the src/ files and without extension, for example.)

This is the reason why I file this as a bug. It actually works, so it is not a feature request.

So all it needs is for TS to stop showing the "cannot find name" errors, I don't need a change in behavior, since it does find the names just fine.


PS: I realize this is probably deeper, the plugin does not specifically remove the comments, I think it is the path.remove() command from the underlying AST. That doesn't make it any better or even right though. Others had similar issues in the past.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit den gemeldeten tsconfig.json-Einstellungen, insbesondere allowJs und checkJs, und reproduziere die Diagnose in den test/-JavaScript-Dateien, die transpilierte Dateien aus lib/ importieren. Vergleiche JSDoc-Referenzen wie @param {SHA256Hash} mit der Form import(...) und untersuche das damit verbundene Verhalten aus issue #17606. Als erledigt gilt die Aufgabe, wenn gültige JSDoc-Typnamen nicht mehr TS2304 erzeugen und dabei die gemeldeten Typinformationen und die Navigation erhalten bleiben.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
babel, javascript, nodejs, typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.