Skip to content

Cannot read properties of undefined (reading 'length') #51623

Description

Bug Report

🔎 Search Terms

Cannot read properties of undefined, tsc crash

🕗 Version & Regression Information

First noticed on 5.0.0-dev.20221118 nightly build, persists on 5.0.0-dev.20221122

⏯ Playground Link

https://www.typescriptlang.org/play?module=1&ts=5.0.0-dev.20221122#code/KYDwDg9gTgLgBDAnmYcBiEIB4AqcC8cAzjFAJYB2A5gHwFwDeAvgNwBQbA9J3AAIBmZADbAKAQwC2wAFxxBIgEwA6GEQ5kJkWIwwQmcqBAlwA5Es6UwAVxgn2bflYoBjGGQgU4AIzFRcNAApgESkKGFldAEpGNjg4KGAYKyhPAEZ2Jg4fKADUuDEidEwsCisJL2AoGkiWIA

💻 Code

// main.ts
import {Foo} from './x';

function bar<T>(element: Foo) {
  return 1;
}

bar(1 as Foo<number>);
// x.ts
export type Foo<T = string> = {};

🙁 Actual behavior

A crash:

/usr/local/lib/node_modules/typescript/lib/tsc.js:98593
      throw e;
      ^

TypeError: Cannot read properties of undefined (reading 'length')
    at inferFromTypeArguments (/usr/local/lib/node_modules/typescript/lib/tsc.js:55506:54)
    at inferFromTypes (/usr/local/lib/node_modules/typescript/lib/tsc.js:55314:11)
    at inferTypes (/usr/local/lib/node_modules/typescript/lib/tsc.js:55300:5)
    at inferTypeArguments (/usr/local/lib/node_modules/typescript/lib/tsc.js:61051:11)
    at chooseOverload (/usr/local/lib/node_modules/typescript/lib/tsc.js:61672:33)
    at resolveCall (/usr/local/lib/node_modules/typescript/lib/tsc.js:61539:16)
    at resolveCallExpression (/usr/local/lib/node_modules/typescript/lib/tsc.js:61870:12)
    at resolveSignature (/usr/local/lib/node_modules/typescript/lib/tsc.js:62215:16)
    at getResolvedSignature (/usr/local/lib/node_modules/typescript/lib/tsc.js:62235:20)
    at checkCallExpression (/usr/local/lib/node_modules/typescript/lib/tsc.js:62340:23)

🙂 Expected behavior

Success or compilation errors.

Activity

  1. nicolas377 commented on Nov 22, 2022

    @nicolas377
    Contributor

    Running git bisect with this repro shows the error popped up at a3092c7 (#51152).

  2. added
    BugA bug in TypeScript
    CrashFor flagging bugs which are compiler or service crashes or unclean exits, rather than bad output
    on Nov 23, 2022
  3. Andarist commented on Nov 23, 2022

    @Andarist
    Contributor

    This particular error goes away with this patch (unfortunately, it breaks other things though):

    diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
    index 92a989a2bc..394fa24674 100644
    --- a/src/compiler/checker.ts
    +++ b/src/compiler/checker.ts
    @@ -14901,7 +14901,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
                         const resolved = resolveAlias(aliasSymbol);
                         if (resolved && resolved.flags & SymbolFlags.TypeAlias) {
                             newAliasSymbol = resolved;
    -                        aliasTypeArguments = typeArgumentsFromTypeReferenceNode(node);
    +                        aliasTypeArguments = getTypeArgumentsForAliasSymbol(newAliasSymbol);
                         }
                     }
                 }
    

    I'm not entirely sure if this patch produces a correct result for this test case as I'm not entirely sure what to expect out of the .types and .symbols snapshots here. It compiles and doesn't produce any errors though.

  4. added a commit that references this issue on Dec 5, 2022
    ec8c8b8
  5. added a commit that references this issue on Dec 5, 2022
    e9e7a9d
  6. locked as resolved and limited conversation to collaborators on Oct 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

BugA bug in TypeScriptCrashFor flagging bugs which are compiler or service crashes or unclean exits, rather than bad outputFix AvailableA PR has been opened for this issue

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions