Skip to content

'Debug Failure: Unexpected Node' when using a JSDoc type with a decorator #37276

Description

@refi64

TypeScript Version: Nightly, 3.8.3

Search Terms: jsdoc, "unexpected node"

Expected behavior: Compilation to show an error. (I accidentally used a JSDoc type, jumping between too many different languages at once...)

Actual behavior: TypeScript crashed, from the CLI it crashed even before any diagnostics were printed:

/var/home/ryan/code/bkglass/proxissh/node_modules/typescript/lib/tsc.js:81040
                throw e;
                ^

Error: Debug Failure. Unexpected node.
Node 297 was unexpected.
    at serializeTypeNode (/var/home/ryan/code/bkglass/proxissh/node_modules/typescript/lib/tsc.js:64374:37)
    at serializeTypeOfNode (/var/home/ryan/code/bkglass/proxissh/node_modules/typescript/lib/tsc.js:64249:28)
    at addOldTypeMetadata (/var/home/ryan/code/bkglass/proxissh/node_modules/typescript/lib/tsc.js:64191:92)
    at addTypeMetadata (/var/home/ryan/code/bkglass/proxissh/node_modules/typescript/lib/tsc.js:64185:17)
    at transformAllDecoratorsOfDeclaration (/var/home/ryan/code/bkglass/proxissh/node_modules/typescript/lib/tsc.js:64104:13)
    at generateClassElementDecorationExpression (/var/home/ryan/code/bkglass/proxissh/node_modules/typescript/lib/tsc.js:64129:40)
    at generateClassElementDecorationExpressions (/var/home/ryan/code/bkglass/proxissh/node_modules/typescript/lib/tsc.js:64115:34)
    at addClassElementDecorationStatements (/var/home/ryan/code/bkglass/proxissh/node_modules/typescript/lib/tsc.js:64108:44)
    at visitClassDeclaration (/var/home/ryan/code/bkglass/proxissh/node_modules/typescript/lib/tsc.js:63906:13)
    at visitTypeScript (/var/home/ryan/code/bkglass/proxissh/node_modules/typescript/lib/tsc.js:63795:28)
error Command failed with exit code 1.

From the playground, the error is a bit different and a diagnostic is shown first:

Uncaught (in promise) Error: Debug Failure. Unexpected node.
Node JSDocNullableType was unexpected.
    at ae (tsWorker.js:21)
    at ne (tsWorker.js:21)
    at tsWorker.js:21
    at tsWorker.js:21
    at q (tsWorker.js:21)
    at X (tsWorker.js:21)
    at tsWorker.js:21
    at J (tsWorker.js:21)
    at tsWorker.js:21
    at F (tsWorker.js:21)

Related Issues: #27999 seems similar

Code

declare function decorator(): PropertyDecorator

class X {
    @decorator()
    foo?: string?
}

Note that this requires emitDecoratorMetadata: true and experimentalDecorators: true.

Output
"use strict";
X;
{
    foo ?  : string ?
        :
    ;
}
Compiler Options
{
  "compilerOptions": {
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "strictBindCallApply": true,
    "noImplicitThis": true,
    "noImplicitReturns": true,
    "useDefineForClassFields": false,
    "alwaysStrict": true,
    "allowUnreachableCode": false,
    "allowUnusedLabels": false,
    "downlevelIteration": false,
    "noEmitHelpers": false,
    "noLib": false,
    "noStrictGenericChecks": false,
    "noUnusedLocals": false,
    "noUnusedParameters": false,
    "esModuleInterop": true,
    "preserveConstEnums": false,
    "removeComments": false,
    "skipLibCheck": false,
    "checkJs": false,
    "allowJs": false,
    "declaration": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "target": "ES2017",
    "module": "ESNext"
  }
}

Playground Link: Provided

EDIT: Please ignore the title rename, I hit Enter too soon by accident...

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

BugA bug in TypeScript

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions