microsoft / microsoft/TypeScript

JSDoc import integration doesn't support return-style AMD modules

Offen
#38,416 3 Kommentare 0 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

@sandersn arbeitet bereits daran.

Seit 05.6.2020.

Awaiting More Feedback
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

TypeScript Version: 4.0.0-dev.20200508
also 3.8.3 (and presumably any other version)

Search Terms:
require, AMD, exports, import, JSDoc, module

Code

mod.js

// @ts-check

define(function () {
  // (1) this checks
  // exports.number = 12;

  // (2) this doesn't check
  // var exports = {
  //   number: 12
  // };
  // return exports;

  // (3) this also doesn't check
  return {
    number : 12
  }
});

usage.js

// @ts-check

define(function(require) {
  /** @type {import('mod')} */
  var Mod = require('mod');
  Mod.number;
});

My tsconfig is configured for JS/AMD/es5/noEmit:

    "allowJs": true,
    "module": "AMD",
    "target": "es5",
    "noEmit": true,

Expected behavior:

The import in the @type annotation in usage.js is correctly resolved for all three AMD module variants of mod.js .

Actual behavior:

Only the first variant, where number is explicitly added to exports works.
For the second and third variants, I get a compile error.

src/usage.js:4:23 - error TS2306: File 'd:/ns-prog/ts-jsdoc/src/mod.js' is not a module.

4     /** @type {import('mod')} */

Considering both (2) and (3) are valid AMD modules, I would expect this to work.

Note that JSDoc supports @exports annotation. Perhaps that could be utilized in the TypeScript-JSDoc integration?

Playground Link: N/A (I didn't see an option to have multiple files.)

Related Issues:
There's a StackOverflow question from 2016 https://stackoverflow.com/questions/37035462/importing-amd-modules-that-don-t-use-exports-with-typescript, but I didn't find any issue for it here.

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.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

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