Fix import type resolution in jsdoc, mark 2 (#35057)

Fake alias resolution only applies when the import type is followed by a
qualified name. Otherwise the alias is sufficiently resolved already.
This commit is contained in:
Nathan Shively-Sanders 2019-11-12 12:44:30 -08:00 committed by GitHub
parent 94f85901d7
commit f3344767dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 103 additions and 1 deletions

View File

@ -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);
}
}

View File

@ -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))
}

View File

@ -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
}

View File

@ -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))
}

View File

@ -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 : {}
}

View File

@ -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
}

View File

@ -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
}