diff --git a/internal/printer/printer.go b/internal/printer/printer.go index 2b8630a715c..4dde705ebb3 100644 --- a/internal/printer/printer.go +++ b/internal/printer/printer.go @@ -743,6 +743,9 @@ func (p *Printer) shouldEmitComments(node *ast.Node) bool { } func (p *Printer) shouldWriteComment(comment ast.CommentRange) bool { + if p.Options.OnlyPrintJSDocStyle && p.currentSourceFile != nil && isConvertedJSDocDeclarationComment(p.currentSourceFile.Text(), comment) { + return false + } return !p.Options.OnlyPrintJSDocStyle || p.currentSourceFile != nil && isJSDocLikeText(p.currentSourceFile.Text(), comment) || p.currentSourceFile != nil && IsPinnedComment(p.currentSourceFile.Text(), comment) diff --git a/internal/printer/utilities.go b/internal/printer/utilities.go index d401abd87dd..8af14e34514 100644 --- a/internal/printer/utilities.go +++ b/internal/printer/utilities.go @@ -865,6 +865,25 @@ func isJSDocLikeText(text string, comment ast.CommentRange) bool { text[comment.Pos()+3] != '/' } +func isConvertedJSDocDeclarationComment(text string, comment ast.CommentRange) bool { + if !isJSDocLikeText(text, comment) { + return false + } + for line := range strings.Lines(text[comment.Pos():comment.End()]) { + line = strings.TrimSpace(line) + line = strings.TrimSpace(strings.TrimPrefix(line, "*")) + if isJSDocTagLine(line, "typedef") || isJSDocTagLine(line, "callback") { + return true + } + } + return false +} + +func isJSDocTagLine(line string, tag string) bool { + tag = "@" + tag + return strings.HasPrefix(line, tag) && (len(line) == len(tag) || line[len(tag)] == ' ' || line[len(tag)] == '\t') +} + func IsPinnedComment(text string, comment ast.CommentRange) bool { return comment.Kind == ast.KindMultiLineCommentTrivia && comment.Len() > 5 && diff --git a/internal/transformers/declarations/transform.go b/internal/transformers/declarations/transform.go index 2370dedf68d..c45232ba70d 100644 --- a/internal/transformers/declarations/transform.go +++ b/internal/transformers/declarations/transform.go @@ -1500,6 +1500,7 @@ func (tx *DeclarationTransformer) preservePartialJsDoc(updated *ast.Node, origin if description == "" { return } + tx.EmitContext().SetCommentRange(updated, core.NewTextRange(original.End(), original.End())) comment := "*\n * " + strings.ReplaceAll(description, "\n", "\n * ") + "\n " tx.EmitContext().AddSyntheticLeadingComment(updated, ast.KindMultiLineCommentTrivia, comment, true /*hasTrailingNewLine*/) } @@ -1665,13 +1666,15 @@ func (tx *DeclarationTransformer) transformTopLevelDeclaration(input *ast.Node) func (tx *DeclarationTransformer) transformTypeAliasDeclaration(input *ast.TypeAliasDeclaration) *ast.Node { tx.needsDeclare = false - return tx.Factory().UpdateTypeAliasDeclaration( + result := tx.Factory().UpdateTypeAliasDeclaration( input, tx.ensureModifiers(input.AsNode()), input.Name(), tx.Visitor().VisitNodes(input.TypeParameters), tx.Visitor().Visit(input.Type), ) + tx.preservePartialJsDoc(result, input.AsNode()) + return result } func (tx *DeclarationTransformer) transformInterfaceDeclaration(input *ast.InterfaceDeclaration) *ast.Node { diff --git a/testdata/baselines/reference/compiler/exportAssignmentMerging5.js b/testdata/baselines/reference/compiler/exportAssignmentMerging5.js index 0195f74de80..985c9992515 100644 --- a/testdata/baselines/reference/compiler/exportAssignmentMerging5.js +++ b/testdata/baselines/reference/compiler/exportAssignmentMerging5.js @@ -32,9 +32,6 @@ let v1 = { x: "test" }; export type Foo = { x: string; }; -/** - * @typedef {{x: string}} Foo - */ declare const _default: { a: number; b: string; diff --git a/testdata/baselines/reference/compiler/exportAssignmentMerging6.js b/testdata/baselines/reference/compiler/exportAssignmentMerging6.js index 40f8911c5ff..e683a6e2fba 100644 --- a/testdata/baselines/reference/compiler/exportAssignmentMerging6.js +++ b/testdata/baselines/reference/compiler/exportAssignmentMerging6.js @@ -36,9 +36,6 @@ let v1 = { x: "test" }; export type Foo = { x: string; }; -/** - * @typedef {{x: string}} Foo - */ export declare const x = 1; //// [b.d.ts] export {}; diff --git a/testdata/baselines/reference/compiler/jsDocCallbackExport1.js b/testdata/baselines/reference/compiler/jsDocCallbackExport1.js index eac66bbf52a..e081511f7c0 100644 --- a/testdata/baselines/reference/compiler/jsDocCallbackExport1.js +++ b/testdata/baselines/reference/compiler/jsDocCallbackExport1.js @@ -13,9 +13,4 @@ function f1() {} //// [x.d.ts] type Foo = (x: string) => number; -/** - * @callback Foo - * @param {string} x - * @returns {number} - */ declare function f1(): void; diff --git a/testdata/baselines/reference/compiler/jsDocCallbackExport2.js b/testdata/baselines/reference/compiler/jsDocCallbackExport2.js index 8a894ce57d2..7d572ecee17 100644 --- a/testdata/baselines/reference/compiler/jsDocCallbackExport2.js +++ b/testdata/baselines/reference/compiler/jsDocCallbackExport2.js @@ -13,9 +13,4 @@ export function f1() {} //// [x.d.ts] export type Foo = (x: string) => number; -/** - * @callback Foo - * @param {string} x - * @returns {number} - */ export declare function f1(): void; diff --git a/testdata/baselines/reference/compiler/jsdocNonIdentifierPropertiesAndParams.js b/testdata/baselines/reference/compiler/jsdocNonIdentifierPropertiesAndParams.js index c1b67a05e60..e6f4761af9e 100644 --- a/testdata/baselines/reference/compiler/jsdocNonIdentifierPropertiesAndParams.js +++ b/testdata/baselines/reference/compiler/jsdocNonIdentifierPropertiesAndParams.js @@ -26,12 +26,6 @@ export function Button(props) { //// [index.d.ts] -/** - * @typedef {Object} ButtonProps - * @property {string} label The button label - * @property {string | null | undefined} [data-test-name] Test automation attribute - * @property {string | null | undefined} [aria-label] Accessibility label - */ export type ButtonProps = { /** * The button label @@ -52,8 +46,3 @@ export type ButtonProps = { */ export declare function Button(props: ButtonProps): ButtonProps; export type ButtonPropsCallback = (props_like?: ButtonProps) => ButtonProps; -/** - * @callback ButtonPropsCallback - * @param {ButtonProps} [props-like] - * @returns {ButtonProps} - */ diff --git a/testdata/baselines/reference/compiler/jsdocTypedefDeclarationComment.js b/testdata/baselines/reference/compiler/jsdocTypedefDeclarationComment.js new file mode 100644 index 00000000000..30219686fac --- /dev/null +++ b/testdata/baselines/reference/compiler/jsdocTypedefDeclarationComment.js @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/jsdocTypedefDeclarationComment.ts] //// + +//// [main.js] +export const value = 0; + +/** + * Comment on the `Foo` type + * + * @typedef {Object} Foo + * @property {boolean} bool Whether `.bool` is true or not + */ + + + + +//// [main.d.ts] +export declare const value = 0; +/** + * Comment on the `Foo` type + */ +export type Foo = { + /** + * Whether `.bool` is true or not + */ + bool: boolean; +}; diff --git a/testdata/baselines/reference/compiler/jsdocTypedefDeclarationComment.symbols b/testdata/baselines/reference/compiler/jsdocTypedefDeclarationComment.symbols new file mode 100644 index 00000000000..4f26ce79759 --- /dev/null +++ b/testdata/baselines/reference/compiler/jsdocTypedefDeclarationComment.symbols @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/jsdocTypedefDeclarationComment.ts] //// + +=== main.js === +export const value = 0; +>value : Symbol(value, Decl(main.js, 0, 12)) + +/** + * Comment on the `Foo` type + * + * @typedef {Object} Foo + * @property {boolean} bool Whether `.bool` is true or not + */ + diff --git a/testdata/baselines/reference/compiler/jsdocTypedefDeclarationComment.types b/testdata/baselines/reference/compiler/jsdocTypedefDeclarationComment.types new file mode 100644 index 00000000000..8f5609192cf --- /dev/null +++ b/testdata/baselines/reference/compiler/jsdocTypedefDeclarationComment.types @@ -0,0 +1,14 @@ +//// [tests/cases/compiler/jsdocTypedefDeclarationComment.ts] //// + +=== main.js === +export const value = 0; +>value : 0 +>0 : 0 + +/** + * Comment on the `Foo` type + * + * @typedef {Object} Foo + * @property {boolean} bool Whether `.bool` is true or not + */ + diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=false).js b/testdata/baselines/reference/submodule/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=false).js index 7f888c7d20c..87696fba638 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=false).js +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=false).js @@ -42,9 +42,6 @@ export function fnWithPartialAnnotationOnDefaultparam(x = /** @type {P} */(somet //// [input.d.ts] -/** - * @typedef {{ } & { name?: string }} P - */ export type P = {} & { name?: string; }; diff --git a/testdata/baselines/reference/submodule/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=true).js b/testdata/baselines/reference/submodule/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=true).js index c2ea3828da0..5b78e560058 100644 --- a/testdata/baselines/reference/submodule/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=true).js +++ b/testdata/baselines/reference/submodule/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=true).js @@ -42,9 +42,6 @@ export function fnWithPartialAnnotationOnDefaultparam(x = /** @type {P} */(somet //// [input.d.ts] -/** - * @typedef {{ } & { name?: string }} P - */ export type P = {} & { name?: string; }; diff --git a/testdata/baselines/reference/submodule/compiler/jsDeclarationEmitDoesNotRenameImport.js b/testdata/baselines/reference/submodule/compiler/jsDeclarationEmitDoesNotRenameImport.js index 5f0cf191f36..23729740034 100644 --- a/testdata/baselines/reference/submodule/compiler/jsDeclarationEmitDoesNotRenameImport.js +++ b/testdata/baselines/reference/submodule/compiler/jsDeclarationEmitDoesNotRenameImport.js @@ -48,10 +48,6 @@ import Test from './test/Test.js'; export type Options = { test?: typeof import("./Test.js").default; }; -/** - * @typedef {Object} Options - * @property {typeof import("./Test.js").default} [test] - */ declare class X extends Test { test: import("./Test.js").default | undefined; /** diff --git a/testdata/baselines/reference/submodule/compiler/jsDeclarationEmitExportAssignedFunctionWithExtraTypedefsMembers.js b/testdata/baselines/reference/submodule/compiler/jsDeclarationEmitExportAssignedFunctionWithExtraTypedefsMembers.js index 04963921cf7..be3e6738d3f 100644 --- a/testdata/baselines/reference/submodule/compiler/jsDeclarationEmitExportAssignedFunctionWithExtraTypedefsMembers.js +++ b/testdata/baselines/reference/submodule/compiler/jsDeclarationEmitExportAssignedFunctionWithExtraTypedefsMembers.js @@ -25,10 +25,6 @@ module.exports = function loader(options) { }; //// [index.d.ts] -/** - * @typedef Options - * @property {string} opt - */ export type Options = { opt: string; }; diff --git a/testdata/baselines/reference/submodule/compiler/jsDeclarationsInheritedTypes.js b/testdata/baselines/reference/submodule/compiler/jsDeclarationsInheritedTypes.js index 94d864452f5..1ddaebdfc71 100644 --- a/testdata/baselines/reference/submodule/compiler/jsDeclarationsInheritedTypes.js +++ b/testdata/baselines/reference/submodule/compiler/jsDeclarationsInheritedTypes.js @@ -36,20 +36,12 @@ class C3 extends C1 { //// [a.d.ts] -/** - * @typedef A - * @property {string} a - */ type A = { a: string; }; type B = { b: number; }; -/** - * @typedef B - * @property {number} b - */ declare class C1 { /** * @type {A} diff --git a/testdata/baselines/reference/submodule/compiler/jsDocDeclarationEmitDoesNotUseNodeModulesPathWithoutError.js b/testdata/baselines/reference/submodule/compiler/jsDocDeclarationEmitDoesNotUseNodeModulesPathWithoutError.js index 0bb4e6f4999..b26cde544f6 100644 --- a/testdata/baselines/reference/submodule/compiler/jsDocDeclarationEmitDoesNotUseNodeModulesPathWithoutError.js +++ b/testdata/baselines/reference/submodule/compiler/jsDocDeclarationEmitDoesNotUseNodeModulesPathWithoutError.js @@ -47,9 +47,6 @@ NewAjax.prototype.case6_unexpectedlyResolvesPathToNodeModules; //// [index.d.ts] -/** - * @typedef {import('@lion/ajax').LionRequestInit} LionRequestInit - */ export type LionRequestInit = import('@lion/ajax').LionRequestInit; export declare class NewAjax { /** diff --git a/testdata/baselines/reference/submodule/compiler/jsFileAlternativeUseOfOverloadTag.js b/testdata/baselines/reference/submodule/compiler/jsFileAlternativeUseOfOverloadTag.js index 9e0cee6eb69..22af4a31602 100644 --- a/testdata/baselines/reference/submodule/compiler/jsFileAlternativeUseOfOverloadTag.js +++ b/testdata/baselines/reference/submodule/compiler/jsFileAlternativeUseOfOverloadTag.js @@ -138,18 +138,5 @@ declare const example2: { }; type callback = (error: any, result: any) => any; declare const example3: { - /** - * @overload evaluate(options = {}, [callback]) - * Evaluate something - * @note Something interesting - * @param options [map] - * @return [string] returns evaluation result - * @return [null] returns nothing if callback provided - * @callback callback function (error, result) - * If callback is provided it will be called with evaluation result - * @param error [Error] - * @param result [String] - * @see callback - */ evaluate: (options: any, callback: any) => void; }; diff --git a/testdata/baselines/reference/submodule/compiler/reuseTypeAnnotationImportTypeInGlobalThisTypeArgument.js b/testdata/baselines/reference/submodule/compiler/reuseTypeAnnotationImportTypeInGlobalThisTypeArgument.js index 41f5b45f149..6f232c97192 100644 --- a/testdata/baselines/reference/submodule/compiler/reuseTypeAnnotationImportTypeInGlobalThisTypeArgument.js +++ b/testdata/baselines/reference/submodule/compiler/reuseTypeAnnotationImportTypeInGlobalThisTypeArgument.js @@ -35,10 +35,6 @@ export const blah = handleParamGovernance({}); //// [types.d.ts] export {}; export type ParamStateRecord = Record; -/** - * @typedef {Record} ParamStateRecord a Record containing - * keyword pairs with descriptions of parameters under governance. - */ //// [index.d.ts] export declare const blah: { publicMixin: { diff --git a/testdata/baselines/reference/submodule/conformance/callbackOnConstructor.js b/testdata/baselines/reference/submodule/conformance/callbackOnConstructor.js index 4c9906e3cd7..81262ffac62 100644 --- a/testdata/baselines/reference/submodule/conformance/callbackOnConstructor.js +++ b/testdata/baselines/reference/submodule/conformance/callbackOnConstructor.js @@ -35,10 +35,5 @@ var ooscope2 = s => s.length > 0; export type ValueGetter_2 = (name: string) => boolean | number | string | undefined; export declare class Preferences { assignability: string; - /** - * @callback ValueGetter_2 - * @param {string} name - * @returns {boolean|number|string|undefined} - */ constructor(); } diff --git a/testdata/baselines/reference/submodule/conformance/callbackTagNestedParameter.js b/testdata/baselines/reference/submodule/conformance/callbackTagNestedParameter.js index 88bac0df524..388e80b25db 100644 --- a/testdata/baselines/reference/submodule/conformance/callbackTagNestedParameter.js +++ b/testdata/baselines/reference/submodule/conformance/callbackTagNestedParameter.js @@ -22,13 +22,6 @@ function eachPerson(callback) { //// [cb_nested.d.ts] -/** - * @callback WorksWithPeopleCallback - * @param {Object} person - * @param {string} person.name - * @param {number} [person.age] - * @returns {void} - */ type WorksWithPeopleCallback = (person: { name: string; age?: number; diff --git a/testdata/baselines/reference/submodule/conformance/callbackTagVariadicType.js b/testdata/baselines/reference/submodule/conformance/callbackTagVariadicType.js index 6f185c873e3..2ff55c38aec 100644 --- a/testdata/baselines/reference/submodule/conformance/callbackTagVariadicType.js +++ b/testdata/baselines/reference/submodule/conformance/callbackTagVariadicType.js @@ -24,11 +24,6 @@ var res = x('a', 'b'); //// [callbackTagVariadicType.d.ts] -/** - * @callback Foo - * @param {...string} args - * @returns {number} - */ export type Foo = (...args: string) => number; /** @type {Foo} */ export declare const x: Foo; diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsClassImplementsGenericsSerialization(target=es2015).js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsClassImplementsGenericsSerialization(target=es2015).js index a162e36a7e4..d41bbdbfd02 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsClassImplementsGenericsSerialization(target=es2015).js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsClassImplementsGenericsSerialization(target=es2015).js @@ -66,7 +66,3 @@ export declare class Encoder implements IEncoder { encode(value: T): Uint8Array; } export type IEncoder = import('./interface').Encoder; -/** - * @template T - * @typedef {import('./interface').Encoder} IEncoder - */ diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsClassStatic(target=es2015).js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsClassStatic(target=es2015).js index 79ae706540a..d23870d5a44 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsClassStatic(target=es2015).js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsClassStatic(target=es2015).js @@ -68,8 +68,3 @@ export type HandlerOptions = { */ name: string; }; -/** - * @typedef {Object} HandlerOptions - * @property {String} name - * Should be able to export a type alias at the same time. - */ diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsDefault(target=es2015).js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsDefault(target=es2015).js index e875e57bd88..eaed20b3dd4 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsDefault(target=es2015).js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsDefault(target=es2015).js @@ -123,12 +123,6 @@ export default Bar; declare const _default = 12; export default _default; export type default = string | number; -/** - * @typedef {string | number} default - */ //// [index6.d.ts] export default function func(): void; export type default = string | number; -/** - * @typedef {string | number} default - */ diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsDefaultsErr(target=es2015).js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsDefaultsErr(target=es2015).js index 062db66cf59..a8609e1be3d 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsDefaultsErr(target=es2015).js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsDefaultsErr(target=es2015).js @@ -71,20 +71,11 @@ declare class Cls { } export default Cls; export type default = string | number; -/** - * @typedef {string | number} default - */ //// [index2.d.ts] export default class C { } export type default = string | number; -/** - * @typedef {string | number} default - */ //// [index3.d.ts] declare const x = 12; export { x as default }; export type default = string | number; -/** - * @typedef {string | number} default - */ diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsFunctionClassesCjsExportAssignment(target=es2015).js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsFunctionClassesCjsExportAssignment(target=es2015).js index 6092af7095b..d175c797eb5 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsFunctionClassesCjsExportAssignment(target=es2015).js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsFunctionClassesCjsExportAssignment(target=es2015).js @@ -149,36 +149,30 @@ export = Timer; //// [context.d.ts] /** * Imports - * - * @typedef {import("./timer")} Timer - * @typedef {import("./hook")} Hook - * @typedef {import("./hook").HookHandler} HookHandler */ export type Timer = import("./timer"); +/** + * Imports + */ export type Hook = import("./hook"); +/** + * Imports + */ export type HookHandler = import("./hook").HookHandler; +/** + * Input type definition + */ export type Input = { timer: Timer; hook: Hook; }; +/** + * State type definition + */ export type State = { timer: Timer; hook: Hook; }; -/** - * Input type definition - * - * @typedef {Object} Input - * @prop {Timer} timer - * @prop {Hook} hook - */ -/** - * State type definition - * - * @typedef {Object} State - * @prop {Timer} timer - * @prop {Hook} hook - */ /** * New `Context` * @@ -199,9 +193,6 @@ declare namespace Context { export = Context; //// [hook.d.ts] export type HookHandler = (arg: import("./context")) => void; -/** - * @typedef {(arg: import("./context")) => void} HookHandler - */ /** * @param {HookHandler} handle */ diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsFunctionPrototypeStatic(target=es2015).js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsFunctionPrototypeStatic(target=es2015).js index 81f31ee4100..5343752712b 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsFunctionPrototypeStatic(target=es2015).js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsFunctionPrototypeStatic(target=es2015).js @@ -37,10 +37,7 @@ declare namespace MyClass { var staticMethod: () => void; var staticProperty: number; } -export type DoneCB = (failures: number) => any; /** * Callback to be invoked when test execution is complete. - * - * @callback DoneCB - * @param {number} failures - Number of failures that occurred. - */ + */ +export type DoneCB = (failures: number) => any; diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsImportAliasExposedWithinNamespace.js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsImportAliasExposedWithinNamespace.js index 4d58c2fd590..7eeaa8d4fe7 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsImportAliasExposedWithinNamespace.js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsImportAliasExposedWithinNamespace.js @@ -79,11 +79,6 @@ export declare namespace myTypes { export type typeC = myTypes.typeB | Function; } /** @typedef {string|RegExp|Array} myTypes.typeA */ -/** - * @typedef myTypes.typeB - * @property {myTypes.typeA} prop1 - Prop 1. - * @property {string} prop2 - Prop 2. - */ /** @typedef {myTypes.typeB|Function} myTypes.typeC */ export { myTypes }; //// [file2.d.ts] diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsParameterTagReusesInputNodeInEmit1.js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsParameterTagReusesInputNodeInEmit1.js index aefaea945d6..761d0170ffb 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsParameterTagReusesInputNodeInEmit1.js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsParameterTagReusesInputNodeInEmit1.js @@ -74,10 +74,6 @@ export = BaseFactory; type BaseFactory = import('./base'); type BaseFactoryFactory = (factory: import('./base')) => any; /** @typedef {import('./base')} BaseFactory */ -/** - * @callback BaseFactoryFactory - * @param {import('./base')} factory - */ /** @enum {import('./base')} */ declare const couldntThinkOfAny: {}; /** diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeAliases.js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeAliases.js index ba2967e0945..76bfc6d1698 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeAliases.js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypeAliases.js @@ -107,40 +107,21 @@ class LocalThing { //// [index.d.ts] export {}; export type PropName = string | number | symbol; +/** + * Callback + */ export type NumberToStringCb = (a: number) => string; export type MixinName = T & { name: string; }; -export type Identity = (x: T) => T; -/** - * @typedef {string | number | symbol} PropName - */ -/** - * Callback - * - * @callback NumberToStringCb - * @param {number} a - * @returns {string} - */ -/** - * @template T - * @typedef {T & {name: string}} MixinName - */ /** * Identity function - * - * @template T - * @callback Identity - * @param {T} x - * @returns {T} */ +export type Identity = (x: T) => T; //// [mixed.d.ts] export type SomeType = { x: string; } | number | LocalThing | ExportedThing; -/** - * @typedef {{x: string} | number | LocalThing | ExportedThing} SomeType - */ /** * @param {number} x * @returns {SomeType} diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefAndImportTypes.js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefAndImportTypes.js index 454ee00fe08..cc164f3a684 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefAndImportTypes.js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefAndImportTypes.js @@ -67,9 +67,6 @@ module.exports = { //// [conn.d.ts] -/** - * @typedef {string | number} Whatever - */ export type Whatever = string | number; declare class Conn { constructor(); @@ -78,9 +75,6 @@ declare class Conn { } export = Conn; //// [usage.d.ts] -/** - * @typedef {import("./conn")} Conn - */ export type Conn = import("./conn"); declare class Wrap { connItem: number; diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefDescriptionsPreserved.js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefDescriptionsPreserved.js index 2e76c81fde1..2f65376c71d 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefDescriptionsPreserved.js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefDescriptionsPreserved.js @@ -39,9 +39,6 @@ //// [index.d.ts] /** * Options for Foo <------------ - * @typedef {Object} FooOptions - * @property {boolean} bar - Marvin K Mooney - * @property {string} baz - Sylvester McMonkey McBean */ type FooOptions = { /** @@ -53,6 +50,11 @@ type FooOptions = { */ baz: string; }; +/** + * Multiline + * Options + * for Foo <------------ + */ type BarOptions = { /** * - Marvin K Mooney @@ -63,11 +65,3 @@ type BarOptions = { */ baz: string; }; -/** - * Multiline - * Options - * for Foo <------------ - * @typedef {Object} BarOptions - * @property {boolean} bar - Marvin K Mooney - * @property {string} baz - Sylvester McMonkey McBean - */ diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefFunction.js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefFunction.js index af272cabad7..f06b292a76f 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefFunction.js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefFunction.js @@ -35,11 +35,6 @@ const send = handlers => new Promise((resolve, reject) => { //// [foo.d.ts] -/** - * @typedef {{ - * [id: string]: [Function, Function]; - * }} ResolveRejectMap - */ type ResolveRejectMap = { [id: string]: [Function, Function]; }; diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefPropertyAndExportAssignment.js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefPropertyAndExportAssignment.js index 1a11320d0fd..99cab9fa8ff 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefPropertyAndExportAssignment.js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsTypedefPropertyAndExportAssignment.js @@ -136,12 +136,6 @@ export type PriorTaskData = { timers: Map; }; /** @typedef {import('./module.js').TaskGroup} TaskGroup */ -/** - * @typedef TaskNode - * @prop {TaskNode[]} children - * @prop {TaskNode|undefined} parent - * @prop {TaskGroup} group - */ /** @typedef {{timers: Map}} PriorTaskData */ declare class MainThreadTasks { /** diff --git a/testdata/baselines/reference/submodule/conformance/jsDeclarationsUniqueSymbolUsage.js b/testdata/baselines/reference/submodule/conformance/jsDeclarationsUniqueSymbolUsage.js index 35f951bdfd0..ed4545897de 100644 --- a/testdata/baselines/reference/submodule/conformance/jsDeclarationsUniqueSymbolUsage.js +++ b/testdata/baselines/reference/submodule/conformance/jsDeclarationsUniqueSymbolUsage.js @@ -23,9 +23,6 @@ export declare const kSymbol: unique symbol; export type WithSymbol = { [kSymbol]: true; }; -/** - * @typedef {{[kSymbol]: true}} WithSymbol - */ //// [b.d.ts] /** * @returns {import('./a').WithSymbol} diff --git a/testdata/baselines/reference/submodule/conformance/jsdocTemplateTagDefault.js b/testdata/baselines/reference/submodule/conformance/jsdocTemplateTagDefault.js index 449020ebe88..a74f37abd26 100644 --- a/testdata/baselines/reference/submodule/conformance/jsdocTemplateTagDefault.js +++ b/testdata/baselines/reference/submodule/conformance/jsdocTemplateTagDefault.js @@ -129,10 +129,6 @@ function f3(a, b) { } //// [file.d.ts] -/** - * @template {string | number} [T=string] - ok: defaults are permitted - * @typedef {[T]} A - */ type A = [T]; /** @type {A} */ declare const aDefault1: A; /** @type {A} */ declare const aDefault2: A; @@ -143,29 +139,6 @@ type C = [T]; type D = [T]; type E = [T, U]; type G = [T, U]; -/** - * @template T - * @template [U=T] - ok: default can reference earlier type parameter - * @typedef {[T, U]} B - */ -/** - * @template {string | number} [T] - error: default requires an `=type` - * @typedef {[T]} C - */ -/** - * @template {string | number} [T=] - error: default requires a `type` - * @typedef {[T]} D - */ -/** - * @template {string | number} [T=string] - * @template U - error: Required type parameters cannot follow optional type parameters - * @typedef {[T, U]} E - */ -/** - * @template [T=U] - error: Type parameter defaults can only reference previously declared type parameters. - * @template [U=T] - * @typedef {[T, U]} G - */ /** * @template T * @template [U=T] - ok: default can reference earlier type parameter diff --git a/testdata/baselines/reference/submodule/conformance/jsdocTemplateTagNameResolution.js b/testdata/baselines/reference/submodule/conformance/jsdocTemplateTagNameResolution.js index 1ddb2208601..7ed001c612f 100644 --- a/testdata/baselines/reference/submodule/conformance/jsdocTemplateTagNameResolution.js +++ b/testdata/baselines/reference/submodule/conformance/jsdocTemplateTagNameResolution.js @@ -25,11 +25,6 @@ const y = "a"; //// [file.d.ts] -/** - * @template T - * @template {keyof T} K - * @typedef {T[K]} Foo - */ type Foo = T[K]; declare const x: { a: number; diff --git a/testdata/baselines/reference/submodule/conformance/linkTagEmit1.js b/testdata/baselines/reference/submodule/conformance/linkTagEmit1.js index b03dba9647d..a63c6c6c450 100644 --- a/testdata/baselines/reference/submodule/conformance/linkTagEmit1.js +++ b/testdata/baselines/reference/submodule/conformance/linkTagEmit1.js @@ -49,11 +49,6 @@ var see3 = true; //// [linkTagEmit1.d.ts] /** @typedef {number} N */ -/** - * @typedef {Object} D1 - * @property {1} e Just link to {@link NS.R} this time - * @property {1} m Wyatt Earp loved {@link N integers} I bet. - */ type N = number; type D1 = { /** diff --git a/testdata/baselines/reference/submodule/conformance/recursiveTypeReferences2.js b/testdata/baselines/reference/submodule/conformance/recursiveTypeReferences2.js index cb238bde424..fed464b23ec 100644 --- a/testdata/baselines/reference/submodule/conformance/recursiveTypeReferences2.js +++ b/testdata/baselines/reference/submodule/conformance/recursiveTypeReferences2.js @@ -75,24 +75,6 @@ type XMLObject = { } & { [K in keyof T]?: (T[K] extends string ? string : XMLObject); }; -/** - * @template T - * @typedef {{ - $A: { - [K in keyof T]?: XMLObject[] - }, - $O: { - [K in keyof T]?: { - $$?: Record - } & (T[K] extends string ? {$:string} : XMLObject) - }, - $$?: Record, - } & { - [K in keyof T]?: ( - T[K] extends string ? string - : XMLObject - ) -}} XMLObject */ /** @type {XMLObject<{foo:string}>} */ declare const p: XMLObject<{ foo: string; diff --git a/testdata/baselines/reference/submodule/conformance/templateInsideCallback.js b/testdata/baselines/reference/submodule/conformance/templateInsideCallback.js index dc6fe5579e0..bbb2b2136ba 100644 --- a/testdata/baselines/reference/submodule/conformance/templateInsideCallback.js +++ b/testdata/baselines/reference/submodule/conformance/templateInsideCallback.js @@ -118,18 +118,6 @@ type Oops = { b: T; }; type Call = (x: T) => T; -/** - * @typedef Oops - * @template T - * @property {T} a - * @property {T} b - */ -/** - * @callback Call - * @template T - * @param {T} x - * @returns {T} - */ /** * @template T * @type {Call} diff --git a/testdata/baselines/reference/submodule/conformance/typeTagOnFunctionReferencesGeneric.js b/testdata/baselines/reference/submodule/conformance/typeTagOnFunctionReferencesGeneric.js index da1f637a3b9..b0eef0be345 100644 --- a/testdata/baselines/reference/submodule/conformance/typeTagOnFunctionReferencesGeneric.js +++ b/testdata/baselines/reference/submodule/conformance/typeTagOnFunctionReferencesGeneric.js @@ -35,9 +35,6 @@ inJsArrow(2); // no error gets linted as expected //// [typeTagOnFunctionReferencesGeneric.d.ts] -/** - * @typedef {(m : T) => T} IFn - */ export type IFn = (m: T) => T; /**@type {IFn}*/ export declare function inJs(l: T): T; diff --git a/testdata/baselines/reference/submoduleAccepted/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=false).js.diff b/testdata/baselines/reference/submoduleAccepted/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=false).js.diff index 6054696f862..b850727e59c 100644 --- a/testdata/baselines/reference/submoduleAccepted/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=false).js.diff +++ b/testdata/baselines/reference/submoduleAccepted/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=false).js.diff @@ -5,9 +5,6 @@ //// [input.d.ts] -export function fn(p?: P): void; -+/** -+ * @typedef {{ } & { name?: string }} P -+ */ +export type P = {} & { + name?: string; +}; diff --git a/testdata/baselines/reference/submoduleAccepted/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=true).js.diff b/testdata/baselines/reference/submoduleAccepted/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=true).js.diff index 847d19bb9ef..365ed5af510 100644 --- a/testdata/baselines/reference/submoduleAccepted/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=true).js.diff +++ b/testdata/baselines/reference/submoduleAccepted/compiler/declarationEmitCastReusesTypeNode4(strictnullchecks=true).js.diff @@ -5,9 +5,6 @@ //// [input.d.ts] -export function fn(p?: P): void; -+/** -+ * @typedef {{ } & { name?: string }} P -+ */ +export type P = {} & { + name?: string; +}; diff --git a/testdata/baselines/reference/submoduleAccepted/compiler/jsDeclarationEmitDoesNotRenameImport.js.diff b/testdata/baselines/reference/submoduleAccepted/compiler/jsDeclarationEmitDoesNotRenameImport.js.diff index 1df706b5486..ed3787b7a2c 100644 --- a/testdata/baselines/reference/submoduleAccepted/compiler/jsDeclarationEmitDoesNotRenameImport.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/compiler/jsDeclarationEmitDoesNotRenameImport.js.diff @@ -22,10 +22,10 @@ - test?: typeof import("./Test.js").default | undefined; + test?: typeof import("./Test.js").default; }; - /** - * @typedef {Object} Options - * @property {typeof import("./Test.js").default} [test] - */ +-/** +- * @typedef {Object} Options +- * @property {typeof import("./Test.js").default} [test] +- */ declare class X extends Test { + test: import("./Test.js").default | undefined; /** diff --git a/testdata/baselines/reference/submoduleAccepted/compiler/jsDeclarationEmitExportAssignedFunctionWithExtraTypedefsMembers.js.diff b/testdata/baselines/reference/submoduleAccepted/compiler/jsDeclarationEmitExportAssignedFunctionWithExtraTypedefsMembers.js.diff index a798da462bd..57b58303bf5 100644 --- a/testdata/baselines/reference/submoduleAccepted/compiler/jsDeclarationEmitExportAssignedFunctionWithExtraTypedefsMembers.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/compiler/jsDeclarationEmitExportAssignedFunctionWithExtraTypedefsMembers.js.diff @@ -10,10 +10,6 @@ -declare function _exports(options: Options): void; -export = _exports; -type Options = { -+/** -+ * @typedef Options -+ * @property {string} opt -+ */ +export type Options = { opt: string; }; diff --git a/testdata/baselines/reference/submoduleAccepted/compiler/jsDeclarationsInheritedTypes.js.diff b/testdata/baselines/reference/submoduleAccepted/compiler/jsDeclarationsInheritedTypes.js.diff index 6dc3e0a2fe6..37a40f5dd64 100644 --- a/testdata/baselines/reference/submoduleAccepted/compiler/jsDeclarationsInheritedTypes.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/compiler/jsDeclarationsInheritedTypes.js.diff @@ -1,19 +1,27 @@ --- old.jsDeclarationsInheritedTypes.js +++ new.jsDeclarationsInheritedTypes.js -@@= skipped -39, +39 lines =@@ - * @typedef A - * @property {string} a - */ +@@= skipped -35, +35 lines =@@ + + + //// [a.d.ts] +-/** +- * @typedef A +- * @property {string} a +- */ +-/** +- * @typedef B +- * @property {number} b +- */ +type A = { + a: string; +}; +type B = { + b: number; +}; - /** - * @typedef B - * @property {number} b -@@= skipped -11, +17 lines =@@ + declare class C1 { + /** + * @type {A} +@@= skipped -15, +13 lines =@@ value: A; } declare class C2 extends C1 { diff --git a/testdata/baselines/reference/submoduleAccepted/compiler/jsDocDeclarationEmitDoesNotUseNodeModulesPathWithoutError.js.diff b/testdata/baselines/reference/submoduleAccepted/compiler/jsDocDeclarationEmitDoesNotUseNodeModulesPathWithoutError.js.diff index 18975a2a3ff..b7c1e63eec9 100644 --- a/testdata/baselines/reference/submoduleAccepted/compiler/jsDocDeclarationEmitDoesNotUseNodeModulesPathWithoutError.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/compiler/jsDocDeclarationEmitDoesNotUseNodeModulesPathWithoutError.js.diff @@ -1,9 +1,12 @@ --- old.jsDocDeclarationEmitDoesNotUseNodeModulesPathWithoutError.js +++ new.jsDocDeclarationEmitDoesNotUseNodeModulesPathWithoutError.js -@@= skipped -49, +49 lines =@@ - /** - * @typedef {import('@lion/ajax').LionRequestInit} LionRequestInit - */ +@@= skipped -46, +46 lines =@@ + + + //// [index.d.ts] +-/** +- * @typedef {import('@lion/ajax').LionRequestInit} LionRequestInit +- */ -export class NewAjax { +export type LionRequestInit = import('@lion/ajax').LionRequestInit; +export declare class NewAjax { diff --git a/testdata/baselines/reference/submoduleAccepted/compiler/jsFileAlternativeUseOfOverloadTag.js.diff b/testdata/baselines/reference/submoduleAccepted/compiler/jsFileAlternativeUseOfOverloadTag.js.diff index 3751a13d1f7..1d97b402397 100644 --- a/testdata/baselines/reference/submoduleAccepted/compiler/jsFileAlternativeUseOfOverloadTag.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/compiler/jsFileAlternativeUseOfOverloadTag.js.diff @@ -55,6 +55,25 @@ - export { constructor_1 as constructor }; -} -declare namespace example3 { +- /** +- * @overload evaluate(options = {}, [callback]) +- * Evaluate something +- * @note Something interesting +- * @param options [map] +- * @return [string] returns evaluation result +- * @return [null] returns nothing if callback provided +- * @callback callback function (error, result) +- * If callback is provided it will be called with evaluation result +- * @param error [Error] +- * @param result [String] +- * @see callback +- */ +- function evaluate(): any; +-} +-/** +- * function (error, result) +- * If callback is provided it will be called with evaluation result +- */ + constructor: (value: any, options: any) => void; +}; +declare const example2: { @@ -78,21 +97,7 @@ + */ + constructor: () => void; +}; -+type callback = (error: any, result: any) => any; + type callback = (error: any, result: any) => any; +declare const example3: { - /** - * @overload evaluate(options = {}, [callback]) - * Evaluate something -@@= skipped -63, +44 lines =@@ - * @param result [String] - * @see callback - */ -- function evaluate(): any; --} --/** -- * function (error, result) -- * If callback is provided it will be called with evaluation result -- */ --type callback = (error: any, result: any) => any; + evaluate: (options: any, callback: any) => void; +}; \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/compiler/reuseTypeAnnotationImportTypeInGlobalThisTypeArgument.js.diff b/testdata/baselines/reference/submoduleAccepted/compiler/reuseTypeAnnotationImportTypeInGlobalThisTypeArgument.js.diff index 85f63e1a95a..4a4051ee8fc 100644 --- a/testdata/baselines/reference/submoduleAccepted/compiler/reuseTypeAnnotationImportTypeInGlobalThisTypeArgument.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/compiler/reuseTypeAnnotationImportTypeInGlobalThisTypeArgument.js.diff @@ -4,14 +4,12 @@ //// [types.d.ts] -+export {}; -+export type ParamStateRecord = Record; - /** +-/** - * a Record containing -+ * @typedef {Record} ParamStateRecord a Record containing - * keyword pairs with descriptions of parameters under governance. - */ --export type ParamStateRecord = Record; +- * keyword pairs with descriptions of parameters under governance. +- */ ++export {}; + export type ParamStateRecord = Record; //// [index.d.ts] -export const blah: { +export declare const blah: { diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/callbackOnConstructor.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/callbackOnConstructor.js.diff index 57acdc9903a..241a1d7f878 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/callbackOnConstructor.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/callbackOnConstructor.js.diff @@ -8,10 +8,5 @@ +export type ValueGetter_2 = (name: string) => boolean | number | string | undefined; +export declare class Preferences { assignability: string; -+ /** -+ * @callback ValueGetter_2 -+ * @param {string} name -+ * @returns {boolean|number|string|undefined} -+ */ + constructor(); } \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/callbackTagNestedParameter.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/callbackTagNestedParameter.js.diff index 08d3d13ace7..18c48a1f38a 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/callbackTagNestedParameter.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/callbackTagNestedParameter.js.diff @@ -1,20 +1,30 @@ --- old.callbackTagNestedParameter.js +++ new.callbackTagNestedParameter.js -@@= skipped -28, +28 lines =@@ - * @param {number} [person.age] - * @returns {void} - */ -+type WorksWithPeopleCallback = (person: { -+ name: string; -+ age?: number; -+}) => void; - /** - * For each person, calls your callback. - * @param {WorksWithPeopleCallback} callback - * @returns {void} - */ - declare function eachPerson(callback: WorksWithPeopleCallback): void; --type WorksWithPeopleCallback = (person: { -- name: string; +@@= skipped -21, +21 lines =@@ + + + //// [cb_nested.d.ts] +-/** +- * @callback WorksWithPeopleCallback +- * @param {Object} person +- * @param {string} person.name +- * @param {number} [person.age] +- * @returns {void} +- */ +-/** +- * For each person, calls your callback. +- * @param {WorksWithPeopleCallback} callback +- * @returns {void} +- */ +-declare function eachPerson(callback: WorksWithPeopleCallback): void; + type WorksWithPeopleCallback = (person: { + name: string; - age?: number | undefined; --}) => void; \ No newline at end of file ++ age?: number; + }) => void; ++/** ++ * For each person, calls your callback. ++ * @param {WorksWithPeopleCallback} callback ++ * @returns {void} ++ */ ++declare function eachPerson(callback: WorksWithPeopleCallback): void; \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/callbackTagVariadicType.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/callbackTagVariadicType.js.diff index 147f1ca7f2a..49fb85f89ca 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/callbackTagVariadicType.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/callbackTagVariadicType.js.diff @@ -1,9 +1,14 @@ --- old.callbackTagVariadicType.js +++ new.callbackTagVariadicType.js -@@= skipped -28, +28 lines =@@ - * @param {...string} args - * @returns {number} - */ +@@= skipped -23, +23 lines =@@ + + + //// [callbackTagVariadicType.d.ts] +-/** +- * @callback Foo +- * @param {...string} args +- * @returns {number} +- */ +export type Foo = (...args: string) => number; /** @type {Foo} */ -export const x: Foo; diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsClassImplementsGenericsSerialization(target=es2015).js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsClassImplementsGenericsSerialization(target=es2015).js.diff index b28cf69c18c..36594b5bd81 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsClassImplementsGenericsSerialization(target=es2015).js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsClassImplementsGenericsSerialization(target=es2015).js.diff @@ -12,8 +12,4 @@ encode(value: T): Uint8Array; } -export type IEncoder = import("./interface").Encoder; -+export type IEncoder = import('./interface').Encoder; -+/** -+ * @template T -+ * @typedef {import('./interface').Encoder} IEncoder -+ */ \ No newline at end of file ++export type IEncoder = import('./interface').Encoder; \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsClassStatic(target=es2015).js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsClassStatic(target=es2015).js.diff index dc85734a382..c38ca07b0d1 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsClassStatic(target=es2015).js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsClassStatic(target=es2015).js.diff @@ -29,11 +29,4 @@ +export type HandlerOptions = { /** * Should be able to export a type alias at the same time. - */ - name: string; - }; -+/** -+ * @typedef {Object} HandlerOptions -+ * @property {String} name -+ * Should be able to export a type alias at the same time. -+ */ \ No newline at end of file + */ \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsDefault(target=es2015).js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsDefault(target=es2015).js.diff index b6bcfab5e94..5a8f29e8e8e 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsDefault(target=es2015).js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsDefault(target=es2015).js.diff @@ -33,15 +33,9 @@ +declare const _default = 12; export default _default; +export type default = string | number; -+/** -+ * @typedef {string | number} default -+ */ //// [index6.d.ts] -declare function func(): void; -type func = string | number; -export default func; +export default function func(): void; -+export type default = string | number; -+/** -+ * @typedef {string | number} default -+ */ \ No newline at end of file ++export type default = string | number; \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsDefaultsErr(target=es2015).js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsDefaultsErr(target=es2015).js.diff index db38ef660d7..ce5a1136f80 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsDefaultsErr(target=es2015).js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsDefaultsErr(target=es2015).js.diff @@ -13,22 +13,13 @@ } +export default Cls; +export type default = string | number; -+/** -+ * @typedef {string | number} default -+ */ //// [index2.d.ts] export default class C { } +export type default = string | number; -+/** -+ * @typedef {string | number} default -+ */ //// [index3.d.ts] -export type _default = string | number; +declare const x = 12; export { x as default }; -declare const x: 12; -+export type default = string | number; -+/** -+ * @typedef {string | number} default -+ */ \ No newline at end of file ++export type default = string | number; \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsFunctionClassesCjsExportAssignment(target=es2015).js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsFunctionClassesCjsExportAssignment(target=es2015).js.diff index 63c8cac84a9..421522a034a 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsFunctionClassesCjsExportAssignment(target=es2015).js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsFunctionClassesCjsExportAssignment(target=es2015).js.diff @@ -19,28 +19,50 @@ +export = Timer; //// [context.d.ts] -export = Context; - /** - * Imports - * -@@= skipped -21, +13 lines =@@ - * @typedef {import("./hook")} Hook - * @typedef {import("./hook").HookHandler} HookHandler - */ +-/** +- * Imports +- * +- * @typedef {import("./timer")} Timer +- * @typedef {import("./hook")} Hook +- * @typedef {import("./hook").HookHandler} HookHandler +- */ ++/** ++ * Imports ++ */ +export type Timer = import("./timer"); ++/** ++ * Imports ++ */ +export type Hook = import("./hook"); ++/** ++ * Imports ++ */ +export type HookHandler = import("./hook").HookHandler; + /** + * Input type definition +- * +- * @typedef {Object} Input +- * @prop {Timer} timer +- * @prop {Hook} hook + */ +export type Input = { + timer: Timer; + hook: Hook; +}; + /** + * State type definition +- * +- * @typedef {Object} State +- * @prop {Timer} timer +- * @prop {Hook} hook + */ +export type State = { + timer: Timer; + hook: Hook; +}; /** - * Input type definition + * New `Context` * -@@= skipped -20, +31 lines =@@ * @class * @param {Input} input */ @@ -123,11 +145,11 @@ +export = Context; //// [hook.d.ts] -export = Hook; +-/** +- * @typedef {(arg: import("./context")) => void} HookHandler +- */ +export type HookHandler = (arg: import("./context")) => void; /** - * @typedef {(arg: import("./context")) => void} HookHandler - */ -@@= skipped -76, +21 lines =@@ * @param {HookHandler} handle */ declare function Hook(handle: HookHandler): void; diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsFunctionPrototypeStatic(target=es2015).js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsFunctionPrototypeStatic(target=es2015).js.diff index 2119685dadc..708f0ce9fec 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsFunctionPrototypeStatic(target=es2015).js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsFunctionPrototypeStatic(target=es2015).js.diff @@ -14,12 +14,8 @@ } -declare function staticMethod(): void; -declare var staticProperty: number; -+export type DoneCB = (failures: number) => any; /** * Callback to be invoked when test execution is complete. -- */ + */ -type DoneCB = (failures: number) => any; -+ * -+ * @callback DoneCB -+ * @param {number} failures - Number of failures that occurred. -+ */ \ No newline at end of file ++export type DoneCB = (failures: number) => any; \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsImportAliasExposedWithinNamespace.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsImportAliasExposedWithinNamespace.js.diff index 0b5ec6b3a9d..8729f5625bb 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsImportAliasExposedWithinNamespace.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsImportAliasExposedWithinNamespace.js.diff @@ -27,22 +27,19 @@ }; - type typeC = myTypes.typeB | Function; -} -+} -+export declare namespace myTypes { -+ export type typeC = myTypes.typeB | Function; -+} -+/** @typedef {string|RegExp|Array} myTypes.typeA */ - /** +-/** - * @namespace myTypes - * @global - * @type {Object} -+ * @typedef myTypes.typeB -+ * @property {myTypes.typeA} prop1 - Prop 1. -+ * @property {string} prop2 - Prop 2. - */ +- */ -export const myTypes: { - [x: string]: any; -}; ++} ++export declare namespace myTypes { ++ export type typeC = myTypes.typeB | Function; ++} ++/** @typedef {string|RegExp|Array} myTypes.typeA */ +/** @typedef {myTypes.typeB|Function} myTypes.typeC */ +export { myTypes }; //// [file2.d.ts] @@ -60,7 +57,7 @@ } /** @typedef {boolean|myTypes.typeC} testFnTypes.input */ /** -@@= skipped -21, +30 lines =@@ +@@= skipped -21, +25 lines =@@ * @param {testFnTypes.input} input - Input. * @returns {number|null} Result. */ diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsParameterTagReusesInputNodeInEmit1.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsParameterTagReusesInputNodeInEmit1.js.diff index 408968833eb..827c4fbc2b5 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsParameterTagReusesInputNodeInEmit1.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsParameterTagReusesInputNodeInEmit1.js.diff @@ -27,9 +27,14 @@ +type BaseFactory = import('./base'); +type BaseFactoryFactory = (factory: import('./base')) => any; /** @typedef {import('./base')} BaseFactory */ +-/** +- * @callback BaseFactoryFactory +- * @param {import('./base')} factory +- */ + /** @enum {import('./base')} */ + declare const couldntThinkOfAny: {}; /** - * @callback BaseFactoryFactory -@@= skipped -26, +23 lines =@@ +@@= skipped -26, +19 lines =@@ * @param {InstanceType} base * @returns {InstanceType} */ diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypeAliases.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypeAliases.js.diff index abba5cd4960..8f9438d0a83 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypeAliases.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypeAliases.js.diff @@ -6,43 +6,15 @@ //// [index.d.ts] +export {}; export type PropName = string | number | symbol; --/** -- * Callback + /** + * Callback +@@= skipped -17, +18 lines =@@ + x: string; + } | number | LocalThing | ExportedThing; + /** +- * @typedef {{x: string} | number | LocalThing | ExportedThing} SomeType - */ - export type NumberToStringCb = (a: number) => string; - export type MixinName = T & { - name: string; - }; -/** -- * Identity function -- */ - export type Identity = (x: T) => T; -+/** -+ * @typedef {string | number | symbol} PropName -+ */ -+/** -+ * Callback -+ * -+ * @callback NumberToStringCb -+ * @param {number} a -+ * @returns {string} -+ */ -+/** -+ * @template T -+ * @typedef {T & {name: string}} MixinName -+ */ -+/** -+ * Identity function -+ * -+ * @template T -+ * @callback Identity -+ * @param {T} x -+ * @returns {T} -+ */ - //// [mixed.d.ts] - export type SomeType = { - x: string; -@@= skipped -23, +40 lines =@@ * @param {number} x * @returns {SomeType} */ diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefAndImportTypes.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefAndImportTypes.js.diff index ccfe330fdc6..96dabadbdbf 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefAndImportTypes.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefAndImportTypes.js.diff @@ -5,9 +5,9 @@ //// [conn.d.ts] -export = Conn; - /** - * @typedef {string | number} Whatever - */ +-/** +- * @typedef {string | number} Whatever +- */ +export type Whatever = string | number; declare class Conn { + constructor(); @@ -20,12 +20,11 @@ -type Whatever = string | number; +export = Conn; //// [usage.d.ts] --export type Conn = import("./conn"); - /** - * @typedef {import("./conn")} Conn - */ + export type Conn = import("./conn"); +-/** +- * @typedef {import("./conn")} Conn +- */ -export class Wrap { -+export type Conn = import("./conn"); +declare class Wrap { + connItem: number; + /** @type {import("./conn").Whatever} */ diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefDescriptionsPreserved.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefDescriptionsPreserved.js.diff deleted file mode 100644 index 591445e4a9c..00000000000 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefDescriptionsPreserved.js.diff +++ /dev/null @@ -1,44 +0,0 @@ ---- old.jsDeclarationsTypedefDescriptionsPreserved.js -+++ new.jsDeclarationsTypedefDescriptionsPreserved.js -@@= skipped -38, +38 lines =@@ - //// [index.d.ts] - /** - * Options for Foo <------------ -+ * @typedef {Object} FooOptions -+ * @property {boolean} bar - Marvin K Mooney -+ * @property {string} baz - Sylvester McMonkey McBean - */ - type FooOptions = { - /** -@@= skipped -11, +14 lines =@@ - */ - baz: string; - }; -+type BarOptions = { -+ /** -+ * - Marvin K Mooney -+ */ -+ bar: boolean; -+ /** -+ * - Sylvester McMonkey McBean -+ */ -+ baz: string; -+}; - /** - * Multiline - * Options - * for Foo <------------ -+ * @typedef {Object} BarOptions -+ * @property {boolean} bar - Marvin K Mooney -+ * @property {string} baz - Sylvester McMonkey McBean - */ --type BarOptions = { -- /** -- * - Marvin K Mooney -- */ -- bar: boolean; -- /** -- * - Sylvester McMonkey McBean -- */ -- baz: string; --}; \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefFunction.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefFunction.js.diff index 257a154f334..158f176437d 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefFunction.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefFunction.js.diff @@ -1,19 +1,26 @@ --- old.jsDeclarationsTypedefFunction.js +++ new.jsDeclarationsTypedefFunction.js -@@= skipped -39, +39 lines =@@ - * [id: string]: [Function, Function]; - * }} ResolveRejectMap - */ -+type ResolveRejectMap = { -+ [id: string]: [Function, Function]; -+}; - declare let id: number; - /** - * @param {ResolveRejectMap} handlers - * @returns {Promise} - */ +@@= skipped -34, +34 lines =@@ + + + //// [foo.d.ts] +-/** +- * @typedef {{ +- * [id: string]: [Function, Function]; +- * }} ResolveRejectMap +- */ +-declare let id: number; +-/** +- * @param {ResolveRejectMap} handlers +- * @returns {Promise} +- */ -declare function send(handlers: ResolveRejectMap): Promise; --type ResolveRejectMap = { -- [id: string]: [Function, Function]; --}; + type ResolveRejectMap = { + [id: string]: [Function, Function]; + }; ++declare let id: number; ++/** ++ * @param {ResolveRejectMap} handlers ++ * @returns {Promise} ++ */ +declare const send: (handlers: ResolveRejectMap) => Promise; \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefPropertyAndExportAssignment.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefPropertyAndExportAssignment.js.diff index 6b37beef66c..da83cb6a60a 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefPropertyAndExportAssignment.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsTypedefPropertyAndExportAssignment.js.diff @@ -55,9 +55,16 @@ + timers: Map; +}; /** @typedef {import('./module.js').TaskGroup} TaskGroup */ - /** - * @typedef TaskNode -@@= skipped -41, +46 lines =@@ +-/** +- * @typedef TaskNode +- * @prop {TaskNode[]} children +- * @prop {TaskNode|undefined} parent +- * @prop {TaskGroup} group +- */ + /** @typedef {{timers: Map}} PriorTaskData */ + declare class MainThreadTasks { + /** +@@= skipped -41, +40 lines =@@ */ constructor(x: TaskGroup, y: TaskNode); } diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsUniqueSymbolUsage.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsUniqueSymbolUsage.js.diff index 1c10d058184..e8a3d224ab3 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsUniqueSymbolUsage.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsDeclarationsUniqueSymbolUsage.js.diff @@ -9,11 +9,7 @@ export type WithSymbol = { [kSymbol]: true; }; -+/** -+ * @typedef {{[kSymbol]: true}} WithSymbol -+ */ - //// [b.d.ts] - /** +@@= skipped -9, +9 lines =@@ * @returns {import('./a').WithSymbol} * @param {import('./a').WithSymbol} value */ diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsdocTemplateTagDefault.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsdocTemplateTagDefault.js.diff index 5bd05e16ad5..9b0d198a76c 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsdocTemplateTagDefault.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsdocTemplateTagDefault.js.diff @@ -1,12 +1,32 @@ --- old.jsdocTemplateTagDefault.js +++ new.jsdocTemplateTagDefault.js -@@= skipped -129, +129 lines =@@ +@@= skipped -128, +128 lines =@@ + //// [file.d.ts] - /** -+ * @template {string | number} [T=string] - ok: defaults are permitted -+ * @typedef {[T]} A -+ */ +-/** +- * @template T +- * @template [U=T] - ok: default can reference earlier type parameter +- * @typedef {[T, U]} B +- */ +-/** +- * @template {string | number} [T] - error: default requires an `=type` +- * @typedef {[T]} C +- */ +-/** +- * @template {string | number} [T=] - error: default requires a `type` +- * @typedef {[T]} D +- */ +-/** +- * @template {string | number} [T=string] +- * @template U - error: Required type parameters cannot follow optional type parameters +- * @typedef {[T, U]} E +- */ +-/** +- * @template [T=U] - error: Type parameter defaults can only reference previously declared type parameters. +- * @template [U=T] +- * @typedef {[T, U]} G +- */ +type A = [T]; +/** @type {A} */ declare const aDefault1: A; +/** @type {A} */ declare const aDefault2: A; @@ -17,11 +37,10 @@ +type D = [T]; +type E = [T, U]; +type G = [T, U]; -+/** + /** * @template T * @template [U=T] - ok: default can reference earlier type parameter - * @typedef {[T, U]} B -@@= skipped -43, +57 lines =@@ +@@= skipped -44, +31 lines =@@ * @param {U} b */ declare function f3(a: T, b: U): void; diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/jsdocTemplateTagNameResolution.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/jsdocTemplateTagNameResolution.js.diff index 941cd76b932..82e7199f5b5 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/jsdocTemplateTagNameResolution.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/jsdocTemplateTagNameResolution.js.diff @@ -7,11 +7,6 @@ -declare namespace x { - let a: number; -} -+/** -+ * @template T -+ * @template {keyof T} K -+ * @typedef {T[K]} Foo -+ */ +type Foo = T[K]; +declare const x: { + a: number; diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/linkTagEmit1.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/linkTagEmit1.js.diff index b2914fdd8a6..34a54b3ecaf 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/linkTagEmit1.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/linkTagEmit1.js.diff @@ -1,9 +1,14 @@ --- old.linkTagEmit1.js +++ new.linkTagEmit1.js -@@= skipped -53, +53 lines =@@ - * @property {1} e Just link to {@link NS.R} this time - * @property {1} m Wyatt Earp loved {@link N integers} I bet. - */ +@@= skipped -48, +48 lines =@@ + + //// [linkTagEmit1.d.ts] + /** @typedef {number} N */ +-/** +- * @typedef {Object} D1 +- * @property {1} e Just link to {@link NS.R} this time +- * @property {1} m Wyatt Earp loved {@link N integers} I bet. +- */ -/** @typedef {number} Z @see N {@link N} */ -/** - * @param {number} integer {@link Z} @@ -14,7 +19,7 @@ type N = number; type D1 = { /** -@@= skipped -19, +12 lines =@@ +@@= skipped -24, +12 lines =@@ m: 1; }; type Z = number; diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/recursiveTypeReferences2.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/recursiveTypeReferences2.js.diff index fcbf5573102..2ecba8f77a4 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/recursiveTypeReferences2.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/recursiveTypeReferences2.js.diff @@ -4,43 +4,48 @@ /** @typedef {ReadonlyArray} JsonArray */ /** @typedef {{ readonly [key: string]: Json }} JsonRecord */ /** @typedef {boolean | number | string | null | JsonRecord | JsonArray | readonly []} Json */ -+type JsonArray = ReadonlyArray; -+type JsonRecord = { -+ readonly [key: string]: Json; -+}; -+type Json = boolean | number | string | null | JsonRecord | JsonArray | readonly []; -+type XMLObject = { -+ $A: { [K in keyof T]?: XMLObject[]; }; -+ $O: { [K in keyof T]?: { -+ $$?: Record; -+ } & (T[K] extends string ? { -+ $: string; -+ } : XMLObject); }; -+ $$?: Record; -+} & { -+ [K in keyof T]?: (T[K] extends string ? string : XMLObject); -+}; - /** - * @template T - * @typedef {{ -@@= skipped -22, +38 lines =@@ - declare const p: XMLObject<{ - foo: string; - }>; --type JsonArray = ReadonlyArray; --type JsonRecord = { -- readonly [key: string]: Json; --}; --type Json = boolean | number | string | null | JsonRecord | JsonArray | readonly []; +-/** +- * @template T +- * @typedef {{ +- $A: { +- [K in keyof T]?: XMLObject[] +- }, +- $O: { +- [K in keyof T]?: { +- $$?: Record +- } & (T[K] extends string ? {$:string} : XMLObject) +- }, +- $$?: Record, +- } & { +- [K in keyof T]?: ( +- T[K] extends string ? string +- : XMLObject +- ) +-}} XMLObject */ +-/** @type {XMLObject<{foo:string}>} */ +-declare const p: XMLObject<{ +- foo: string; +-}>; + type JsonArray = ReadonlyArray; + type JsonRecord = { + readonly [key: string]: Json; + }; + type Json = boolean | number | string | null | JsonRecord | JsonArray | readonly []; -/** - * - */ --type XMLObject = { -- $A: { [K in keyof T]?: XMLObject[]; }; -- $O: { [K in keyof T]?: { -- $$?: Record; -- } & (T[K] extends string ? { -- $: string; -- } : XMLObject); }; -- $$?: Record; --} & { [K in keyof T]?: (T[K] extends string ? string : XMLObject); }; \ No newline at end of file + type XMLObject = { + $A: { [K in keyof T]?: XMLObject[]; }; + $O: { [K in keyof T]?: { +@@= skipped -38, +13 lines =@@ + $: string; + } : XMLObject); }; + $$?: Record; +-} & { [K in keyof T]?: (T[K] extends string ? string : XMLObject); }; ++} & { ++ [K in keyof T]?: (T[K] extends string ? string : XMLObject); ++}; ++/** @type {XMLObject<{foo:string}>} */ ++declare const p: XMLObject<{ ++ foo: string; ++}>; \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/templateInsideCallback.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/templateInsideCallback.js.diff index 36f1f3216ee..c1af66ec9c7 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/templateInsideCallback.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/templateInsideCallback.js.diff @@ -20,15 +20,27 @@ - * @returns {T[]} - */ -declare function flatMap(): any; +-/** +- * @typedef Oops +- * @template T +- * @property {T} a +- * @property {T} b +- */ +-/** +- * @callback Call +- * @template T +- * @param {T} x +- * @returns {T} +- */ +type Oops = { + a: T; + b: T; +}; +type Call = (x: T) => T; /** - * @typedef Oops * @template T -@@= skipped -39, +28 lines =@@ + * @type {Call} +@@= skipped -39, +16 lines =@@ noooooo: string; }; }; diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/typeTagOnFunctionReferencesGeneric.js.diff b/testdata/baselines/reference/submoduleAccepted/conformance/typeTagOnFunctionReferencesGeneric.js.diff index 9eab4021c78..aa854060f6d 100644 --- a/testdata/baselines/reference/submoduleAccepted/conformance/typeTagOnFunctionReferencesGeneric.js.diff +++ b/testdata/baselines/reference/submoduleAccepted/conformance/typeTagOnFunctionReferencesGeneric.js.diff @@ -5,9 +5,6 @@ //// [typeTagOnFunctionReferencesGeneric.d.ts] -export function inJs(m: T): T; -+/** -+ * @typedef {(m : T) => T} IFn -+ */ export type IFn = (m: T) => T; +/**@type {IFn}*/ +export declare function inJs(l: T): T; \ No newline at end of file diff --git a/testdata/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js b/testdata/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js index 09dab50a6d0..3d5eaf18e69 100644 --- a/testdata/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js +++ b/testdata/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js @@ -154,10 +154,6 @@ interface Symbol { declare const console: { log(msg: any): void; }; //// [/home/src/workspaces/lib/common/nominal.d.ts] *new* export type Nominal = T & {}; -/** - * @template T, Name - * @typedef {T & {[Symbol.species]: Name}} Nominal - */ declare const _default: {}; export = _default; @@ -170,7 +166,7 @@ export = _default; module.exports = {}; //// [/home/src/workspaces/lib/common/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","../../solution/common/nominal.js"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a19075dfba5b2d593b761ed8d8cd526f-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\nmodule.exports = {};","signature":"78da1fe1eee174b6f46c66b629c86122-export type Nominal = T & {};\n/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\ndeclare const _default: {};\nexport = _default;\n","impliedNodeFormat":1}],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../solution","skipLibCheck":true},"semanticDiagnosticsPerFile":[[2,[{"pos":51,"end":58,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["species","SymbolConstructor"]}]]],"latestChangedDtsFile":"./nominal.d.ts"} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2025.full.d.ts","../../solution/common/nominal.js"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a19075dfba5b2d593b761ed8d8cd526f-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\nmodule.exports = {};","signature":"01512f0f251e9be5b02a1d98be9d1f04-export type Nominal = T & {};\ndeclare const _default: {};\nexport = _default;\n","impliedNodeFormat":1}],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../solution","skipLibCheck":true},"semanticDiagnosticsPerFile":[[2,[{"pos":51,"end":58,"code":2339,"category":1,"messageKey":"Property_0_does_not_exist_on_type_1_2339","messageArgs":["species","SymbolConstructor"]}]]],"latestChangedDtsFile":"./nominal.d.ts"} //// [/home/src/workspaces/lib/common/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -202,11 +198,11 @@ module.exports = {}; { "fileName": "../../solution/common/nominal.js", "version": "a19075dfba5b2d593b761ed8d8cd526f-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\nmodule.exports = {};", - "signature": "78da1fe1eee174b6f46c66b629c86122-export type Nominal = T & {};\n/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\ndeclare const _default: {};\nexport = _default;\n", + "signature": "01512f0f251e9be5b02a1d98be9d1f04-export type Nominal = T & {};\ndeclare const _default: {};\nexport = _default;\n", "impliedNodeFormat": "CommonJS", "original": { "version": "a19075dfba5b2d593b761ed8d8cd526f-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\nmodule.exports = {};", - "signature": "78da1fe1eee174b6f46c66b629c86122-export type Nominal = T & {};\n/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\ndeclare const _default: {};\nexport = _default;\n", + "signature": "01512f0f251e9be5b02a1d98be9d1f04-export type Nominal = T & {};\ndeclare const _default: {};\nexport = _default;\n", "impliedNodeFormat": 1 } } @@ -239,7 +235,7 @@ module.exports = {}; ] ], "latestChangedDtsFile": "./nominal.d.ts", - "size": 1652 + "size": 1568 } //// [/home/src/workspaces/lib/sub-project-2/index.d.ts] *new* import { MyNominal } from '../sub-project/index'; @@ -265,7 +261,7 @@ export function getVar() { } //// [/home/src/workspaces/lib/sub-project-2/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[4],"fileNames":["lib.es2025.full.d.ts","../common/nominal.d.ts","../sub-project/index.d.ts","../../solution/sub-project-2/index.js"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"78da1fe1eee174b6f46c66b629c86122-export type Nominal = T & {};\n/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\ndeclare const _default: {};\nexport = _default;\n","225285a996cc5c4120877a377890d79e-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n/**\n * @typedef {Nominal} MyNominal\n */ \n",{"version":"db2a90e082fd17d65127bda69975a727-import { MyNominal } from '../sub-project/index';\n\nconst variable = {\n key: /** @type {MyNominal} */('value'),\n};\n\n/**\n * @return {keyof typeof variable}\n */\nexport function getVar() {\n return 'key';\n}","signature":"0620ca4a9fe7036c93bd1594ffccf8eb-import { MyNominal } from '../sub-project/index';\ndeclare const variable: {\n key: MyNominal;\n};\n/**\n * @return {keyof typeof variable}\n */\nexport declare function getVar(): keyof typeof variable;\nexport {};\n","impliedNodeFormat":1}],"fileIdsList":[[2],[3]],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../solution","skipLibCheck":true},"referencedMap":[[3,1],[4,2]],"semanticDiagnosticsPerFile":[[4,[{"pos":9,"end":18,"code":18042,"category":1,"messageKey":"_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042","messageArgs":["MyNominal","import(\"../sub-project/index\").MyNominal"]}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[4],"fileNames":["lib.es2025.full.d.ts","../common/nominal.d.ts","../sub-project/index.d.ts","../../solution/sub-project-2/index.js"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"01512f0f251e9be5b02a1d98be9d1f04-export type Nominal = T & {};\ndeclare const _default: {};\nexport = _default;\n","ba931f9684d9e8eb38e02da33050dc55-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n",{"version":"db2a90e082fd17d65127bda69975a727-import { MyNominal } from '../sub-project/index';\n\nconst variable = {\n key: /** @type {MyNominal} */('value'),\n};\n\n/**\n * @return {keyof typeof variable}\n */\nexport function getVar() {\n return 'key';\n}","signature":"0620ca4a9fe7036c93bd1594ffccf8eb-import { MyNominal } from '../sub-project/index';\ndeclare const variable: {\n key: MyNominal;\n};\n/**\n * @return {keyof typeof variable}\n */\nexport declare function getVar(): keyof typeof variable;\nexport {};\n","impliedNodeFormat":1}],"fileIdsList":[[2],[3]],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../solution","skipLibCheck":true},"referencedMap":[[3,1],[4,2]],"semanticDiagnosticsPerFile":[[4,[{"pos":9,"end":18,"code":18042,"category":1,"messageKey":"_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042","messageArgs":["MyNominal","import(\"../sub-project/index\").MyNominal"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/home/src/workspaces/lib/sub-project-2/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -298,14 +294,14 @@ export function getVar() { }, { "fileName": "../common/nominal.d.ts", - "version": "78da1fe1eee174b6f46c66b629c86122-export type Nominal = T & {};\n/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\ndeclare const _default: {};\nexport = _default;\n", - "signature": "78da1fe1eee174b6f46c66b629c86122-export type Nominal = T & {};\n/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\ndeclare const _default: {};\nexport = _default;\n", + "version": "01512f0f251e9be5b02a1d98be9d1f04-export type Nominal = T & {};\ndeclare const _default: {};\nexport = _default;\n", + "signature": "01512f0f251e9be5b02a1d98be9d1f04-export type Nominal = T & {};\ndeclare const _default: {};\nexport = _default;\n", "impliedNodeFormat": "CommonJS" }, { "fileName": "../sub-project/index.d.ts", - "version": "225285a996cc5c4120877a377890d79e-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n/**\n * @typedef {Nominal} MyNominal\n */ \n", - "signature": "225285a996cc5c4120877a377890d79e-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n/**\n * @typedef {Nominal} MyNominal\n */ \n", + "version": "ba931f9684d9e8eb38e02da33050dc55-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n", + "signature": "ba931f9684d9e8eb38e02da33050dc55-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n", "impliedNodeFormat": "CommonJS" }, { @@ -364,14 +360,11 @@ export function getVar() { ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 2414 + "size": 2265 } //// [/home/src/workspaces/lib/sub-project/index.d.ts] *new* import { Nominal } from '../common/nominal'; export type MyNominal = Nominal; -/** - * @typedef {Nominal} MyNominal - */ //// [/home/src/workspaces/lib/sub-project/index.js] *new* import { Nominal } from '../common/nominal'; @@ -380,7 +373,7 @@ import { Nominal } from '../common/nominal'; */ //// [/home/src/workspaces/lib/sub-project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[3],"fileNames":["lib.es2025.full.d.ts","../common/nominal.d.ts","../../solution/sub-project/index.js"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"78da1fe1eee174b6f46c66b629c86122-export type Nominal = T & {};\n/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\ndeclare const _default: {};\nexport = _default;\n",{"version":"00b7836eaf1e026f7764b7be6efcc8f5-import { Nominal } from '../common/nominal';\n\n/**\n * @typedef {Nominal} MyNominal\n */","signature":"225285a996cc5c4120877a377890d79e-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n/**\n * @typedef {Nominal} MyNominal\n */ \n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../solution","skipLibCheck":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":9,"end":16,"code":18042,"category":1,"messageKey":"_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042","messageArgs":["Nominal","import(\"../common/nominal\").Nominal"]}]]],"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[3],"fileNames":["lib.es2025.full.d.ts","../common/nominal.d.ts","../../solution/sub-project/index.js"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"01512f0f251e9be5b02a1d98be9d1f04-export type Nominal = T & {};\ndeclare const _default: {};\nexport = _default;\n",{"version":"00b7836eaf1e026f7764b7be6efcc8f5-import { Nominal } from '../common/nominal';\n\n/**\n * @typedef {Nominal} MyNominal\n */","signature":"ba931f9684d9e8eb38e02da33050dc55-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../solution","skipLibCheck":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":9,"end":16,"code":18042,"category":1,"messageKey":"_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042","messageArgs":["Nominal","import(\"../common/nominal\").Nominal"]}]]],"latestChangedDtsFile":"./index.d.ts"} //// [/home/src/workspaces/lib/sub-project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -412,18 +405,18 @@ import { Nominal } from '../common/nominal'; }, { "fileName": "../common/nominal.d.ts", - "version": "78da1fe1eee174b6f46c66b629c86122-export type Nominal = T & {};\n/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\ndeclare const _default: {};\nexport = _default;\n", - "signature": "78da1fe1eee174b6f46c66b629c86122-export type Nominal = T & {};\n/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\ndeclare const _default: {};\nexport = _default;\n", + "version": "01512f0f251e9be5b02a1d98be9d1f04-export type Nominal = T & {};\ndeclare const _default: {};\nexport = _default;\n", + "signature": "01512f0f251e9be5b02a1d98be9d1f04-export type Nominal = T & {};\ndeclare const _default: {};\nexport = _default;\n", "impliedNodeFormat": "CommonJS" }, { "fileName": "../../solution/sub-project/index.js", "version": "00b7836eaf1e026f7764b7be6efcc8f5-import { Nominal } from '../common/nominal';\n\n/**\n * @typedef {Nominal} MyNominal\n */", - "signature": "225285a996cc5c4120877a377890d79e-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n/**\n * @typedef {Nominal} MyNominal\n */ \n", + "signature": "ba931f9684d9e8eb38e02da33050dc55-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n", "impliedNodeFormat": "CommonJS", "original": { "version": "00b7836eaf1e026f7764b7be6efcc8f5-import { Nominal } from '../common/nominal';\n\n/**\n * @typedef {Nominal} MyNominal\n */", - "signature": "225285a996cc5c4120877a377890d79e-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n/**\n * @typedef {Nominal} MyNominal\n */ \n", + "signature": "ba931f9684d9e8eb38e02da33050dc55-import { Nominal } from '../common/nominal';\nexport type MyNominal = Nominal;\n", "impliedNodeFormat": 1 } } @@ -466,7 +459,7 @@ import { Nominal } from '../common/nominal'; ] ], "latestChangedDtsFile": "./index.d.ts", - "size": 2004 + "size": 1855 } common/tsconfig.json:: diff --git a/testdata/submoduleAccepted.txt b/testdata/submoduleAccepted.txt index b9e3d2c233a..ded4f81be15 100644 --- a/testdata/submoduleAccepted.txt +++ b/testdata/submoduleAccepted.txt @@ -1170,7 +1170,6 @@ compiler/nestedGlobalNamespaceInClass.js.diff ## JSDoc @typedef descriptions preserved inline instead of being converted to per-property comments (comment format change only; the type structure is identical) ## Full `@typedef`/`@property` JSDoc blocks are now preserved with the type alias -conformance/jsDeclarationsTypedefDescriptionsPreserved.js.diff ## `declare` modifier on import correctly elides the JS emit (`declare` imports are type-only and should not produce runtime code) ## `import = b` with `declare` modifier no longer emits `var a = b` in JS diff --git a/testdata/tests/cases/compiler/jsdocTypedefDeclarationComment.ts b/testdata/tests/cases/compiler/jsdocTypedefDeclarationComment.ts new file mode 100644 index 00000000000..c1a3ec89b8a --- /dev/null +++ b/testdata/tests/cases/compiler/jsdocTypedefDeclarationComment.ts @@ -0,0 +1,15 @@ +// @allowJs: true +// @checkJs: true +// @declaration: true +// @emitDeclarationOnly: true +// @stableTypeOrdering: true +// @filename: main.js + +export const value = 0; + +/** + * Comment on the `Foo` type + * + * @typedef {Object} Foo + * @property {boolean} bool Whether `.bool` is true or not + */