Visit typedef type expressions so they contribute to referenced-ness (#23525)

This commit is contained in:
Wesley Wigham 2018-04-19 10:28:30 -07:00 committed by GitHub
parent 0526ff5fad
commit 557a34e897
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 85 additions and 0 deletions

View file

@ -21865,6 +21865,11 @@ namespace ts {
// If the node had `@property` tags, `typeExpression` would have been set to the first property tag.
error(node.name, Diagnostics.JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags);
}
if (node.name) {
checkTypeNameIsReserved(node.name, Diagnostics.Type_alias_name_cannot_be_0);
}
checkSourceElement(node.typeExpression);
}
function checkJSDocParameterTag(node: JSDocParameterTag) {
@ -24765,6 +24770,7 @@ namespace ts {
case SyntaxKind.JSDocNullableType:
case SyntaxKind.JSDocAllType:
case SyntaxKind.JSDocUnknownType:
case SyntaxKind.JSDocTypeLiteral:
checkJSDocTypeIsInJsFile(node);
forEachChild(node, checkSourceElement);
return;

View file

@ -0,0 +1,27 @@
=== tests/cases/compiler/file.ts ===
class Foo {
>Foo : Symbol(Foo, Decl(file.ts, 0, 0))
x: number;
>x : Symbol(Foo.x, Decl(file.ts, 0, 11))
}
declare global {
>global : Symbol(global, Decl(file.ts, 2, 1))
var module: any; // Just here to remove unrelated error from test
>module : Symbol(module, Decl(file.ts, 5, 7))
}
export = Foo;
>Foo : Symbol(Foo, Decl(file.ts, 0, 0))
=== tests/cases/compiler/something.js ===
/** @typedef {typeof import("./file")} Foo */
/** @typedef {(foo: Foo) => string} FooFun */
module.exports = /** @type {FooFun} */(void 0);
>module : Symbol(export=, Decl(something.js, 0, 0))
>exports : Symbol(export=, Decl(something.js, 0, 0))

View file

@ -0,0 +1,32 @@
=== tests/cases/compiler/file.ts ===
class Foo {
>Foo : Foo
x: number;
>x : number
}
declare global {
>global : typeof global
var module: any; // Just here to remove unrelated error from test
>module : any
}
export = Foo;
>Foo : Foo
=== tests/cases/compiler/something.js ===
/** @typedef {typeof import("./file")} Foo */
/** @typedef {(foo: Foo) => string} FooFun */
module.exports = /** @type {FooFun} */(void 0);
>module.exports = /** @type {FooFun} */(void 0) : (foo: typeof Foo) => string
>module.exports : any
>module : any
>exports : any
>(void 0) : (foo: typeof Foo) => string
>void 0 : undefined
>0 : 0

View file

@ -0,0 +1,20 @@
// @allowJs: true
// @checkJs: true
// @noEmit: true
// @noUnusedLocals: true
// @filename: file.ts
class Foo {
x: number;
}
declare global {
var module: any; // Just here to remove unrelated error from test
}
export = Foo;
// @filename: something.js
/** @typedef {typeof import("./file")} Foo */
/** @typedef {(foo: Foo) => string} FooFun */
module.exports = /** @type {FooFun} */(void 0);