Skip to content

Commit

Permalink
Fix import type resolution in jsdoc, mark 2 (microsoft#35057)
Browse files Browse the repository at this point in the history
Fake alias resolution only applies when the import type is followed by a
qualified name. Otherwise the alias is sufficiently resolved already.
  • Loading branch information
sandersn authored Nov 12, 2019
1 parent 94f8590 commit f334476
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10852,7 +10852,8 @@ namespace ts {
}
isRequireAlias = isCallExpression(expr) && isRequireCall(expr, /*requireStringLiteralLikeArgument*/ true) && !!valueType.symbol;
}
if (isRequireAlias || node.kind === SyntaxKind.ImportType) {
const isImportTypeWithQualifier = node.kind === SyntaxKind.ImportType && (node as ImportTypeNode).qualifier;
if (isRequireAlias || isImportTypeWithQualifier) {
typeType = getTypeReferenceType(node, valueType.symbol);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
=== tests/cases/conformance/jsdoc/ex.d.ts ===
declare var config: {
>config : Symbol(config, Decl(ex.d.ts, 0, 11))

fix: boolean
>fix : Symbol(fix, Decl(ex.d.ts, 0, 21))
}
export = config;
>config : Symbol(config, Decl(ex.d.ts, 0, 11))

=== tests/cases/conformance/jsdoc/test.js ===
/** @param {import('./ex')} a */
function demo(a) {
>demo : Symbol(demo, Decl(test.js, 0, 0))
>a : Symbol(a, Decl(test.js, 1, 14))

a.fix
>a.fix : Symbol(fix, Decl(ex.d.ts, 0, 21))
>a : Symbol(a, Decl(test.js, 1, 14))
>fix : Symbol(fix, Decl(ex.d.ts, 0, 21))
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
=== tests/cases/conformance/jsdoc/ex.d.ts ===
declare var config: {
>config : { fix: boolean; }

fix: boolean
>fix : boolean
}
export = config;
>config : { fix: boolean; }

=== tests/cases/conformance/jsdoc/test.js ===
/** @param {import('./ex')} a */
function demo(a) {
>demo : (a: { fix: boolean; }) => void
>a : { fix: boolean; }

a.fix
>a.fix : boolean
>a : { fix: boolean; }
>fix : boolean
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
=== tests/cases/conformance/jsdoc/ex.d.ts ===
export var config: {}
>config : Symbol(config, Decl(ex.d.ts, 0, 10))

=== tests/cases/conformance/jsdoc/test.js ===
/** @param {import('./ex')} a */
function demo(a) {
>demo : Symbol(demo, Decl(test.js, 0, 0))
>a : Symbol(a, Decl(test.js, 1, 14))

a.config
>a.config : Symbol(config, Decl(ex.d.ts, 0, 10))
>a : Symbol(a, Decl(test.js, 1, 14))
>config : Symbol(config, Decl(ex.d.ts, 0, 10))
}

16 changes: 16 additions & 0 deletions tests/baselines/reference/jsdocImportTypeReferenceToESModule.types
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
=== tests/cases/conformance/jsdoc/ex.d.ts ===
export var config: {}
>config : {}

=== tests/cases/conformance/jsdoc/test.js ===
/** @param {import('./ex')} a */
function demo(a) {
>demo : (a: typeof import("tests/cases/conformance/jsdoc/ex")) => void
>a : typeof import("tests/cases/conformance/jsdoc/ex")

a.config
>a.config : {}
>a : typeof import("tests/cases/conformance/jsdoc/ex")
>config : {}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// @noEmit: true
// @allowJs: true
// @checkJs: true
// @Filename: ex.d.ts
declare var config: {
fix: boolean
}
export = config;

// @Filename: test.js
/** @param {import('./ex')} a */
function demo(a) {
a.fix
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// @noEmit: true
// @allowJs: true
// @checkJs: true
// @Filename: ex.d.ts
export var config: {}

// @Filename: test.js
/** @param {import('./ex')} a */
function demo(a) {
a.config
}

0 comments on commit f334476

Please sign in to comment.