Skip to content

Crash: TypeError: Cannot read properties of undefined (reading 'flags') in isFreshLiteralType during recursive tuple expansion with unresolved identifiers #62974

Closed

Description

@na7ure-a

🔎 Search Terms

isFreshLiteralType

Cannot read properties of undefined (reading 'flags')

getNormalizedType

"Internal Compiler Error"

"Large tuple crash"

🕗 Version & Regression Information

v5.7.3: Crashes

v5.8.3: Crashes

v5.9.3: Crashes

Nightly (6.0.0-dev.20260108): Crashes

⏯ Playground Link

https://www.typescriptlang.org/zh/play/?target=7&ts=6.0.0-dev.20260111#code/PTAECUFMAcCcHtQDMEFtQGICsAWHBOARgCgAXAT2klAFUA7AZwAsBLJUgFQFdoAbSADwdQkAB6lIdACYNQAbQB0SgIZ1ycgLoaAfKAC8oYWInTZcjnIAMGgDRKFLOkkixDylrw2gA-G4+gALlA6SAA3FwBuMkpqAFFRaFUpAGVUZV5+WG4+SAYhEXFJGXl7VXUtXQMjQtN5C2s7JUdnVw53Tx9DUAAfUHjE6VT0zOz+PLaPXSDNKIoqUGTWdgEAQQKTYpXYWGVyATLtStAACmPS2ABzBiCVgEp9XVD4Fil74yLZM5VL6-kVq1soHszRcEA09z0j2eUk64ECwTCkWi8wA4ggAO79KChVbrD6gLY7PYHGygAByeNqdC4qAARi5SQAFSmbba7VZs4lqQ5Hf4Acn4dAupCYfK871qFN8ayCaPgmIS2IEiiUK0aCkZAI0cjJ4pqxS40kgSEckBhvhVCjV9k11i8N1JZNJizYpAEjMOURAoDm1DlCuguIlrKJ+25jpZsmpdIZoGZwdkhPZSa55B5+hKqtJ9hW2t1kdAhqkxtN5tA-v6ypz2dVgKdfxrGp08IrirCq0dTO0sxi5YxlbWCYJnLDaYjQ+j9NgTILKY5oYOhwzluttZ1eo2siLJZCZdbgZXNgAxjtmHXSXI1UClIzm7L+22cVf6x6e-NRoIOOP9VGaVOjpOoJDlKw6hhwUzkgWlidJo8IUkOhAwRw9p9vKlbmOe8iaDoUTFkevDKLA1D4coDCJpyABq6QvMopDwLA+RDoaADWdDynQmikgAkhmFiAbAzYAN7EKAomgIKwpMOAqgXIIyQFvxpKxApf4uNoxwMKQhGkEEySkkUABCxr0ZAQSxLcNyUdRUi0fRAjxPhXDFvZCRJEMGQuB+eT0MwroflWSj+VxSnaDo2hKa5gxpB5WQ8GMAg+UsnBxYIlpBc6oU8t2xAAL5AA

💻 Code

// Repro from #54491
type UnshiftTuple<T extends [...any[]]> = T extends [T[0],...infer Tail] ? Tail : never;
type ExpandSmallerTuples<T extends [...any[]]> = T extends [T[0],...infer Tail] ? T | ExpandSmallerTuples<Tail> : [];
type Shift<A extends Array<any>> = ((...args: A) => void) extends (...args: [A[0], ...infer R]) => void ? R : never;
type GrowExpRev<A extends Array<any>, N extends number, P extends Array<Array<any>>> = A['length'] extends N ? A : GrowExpRev<[...A,...P[0]][N] extends undefined ? [...A,...P[0]] : A, N, Shift<P>>;
// type GrowExp<A extends Array<any>, N extends number, P extends Array<Array<any>>> = [...A, ...A][N] extends undefined ? GrowExp<[...A, ...A], N, [A, ...P]> : GrowExpRev<A, N, P>;
type GrowExp<A extends Array<any>, N extends number, P extends Array<Array<any>>> = [...A,...A][N] extends undefined ? GrowExp<[...A,crash], N, [A, ...P]> : GrowExpRev<A, N, P>;
type Tuple<T, N extends number> = number extends N ? Array<T> : N extends 0 ? [] : N extends 1 ? [T] : GrowExp<[T], N, [[]]>;
declare class ArrayValidator<T extends unknown[], I = T[number]> {
    lengthRange<S extends number, E extends number>(start: S, endBefore: E): ArrayValidator<Exclude<ExpandSmallerTuples<UnshiftTuple<[...Tuple<I, E>]>>, ExpandSmallerTuples<UnshiftTuple<[...Tuple<I, S>]>>>>;
}

🙁 Actual behavior

.\ts-versions\nightly\node_modules\.bin\tsc.cmd  .\mutated\largeTupleTypes_mutated_batch0.ts
D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:123166
      throw e;
      ^

TypeError: Cannot read properties of undefined (reading 'flags')
    at isFreshLiteralType (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:62933:20)                                                                                              
    at getNormalizedType (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:64661:17)                                                                                               
    at isRelatedTo (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:65015:21)                                                                                                     
    at propertiesRelatedTo (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:66695:29)                                                                                             
    at structuredTypeRelatedToWorker (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:66300:21)                                                                                   
    at structuredTypeRelatedTo (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:65726:21)                                                                                         
    at recursiveTypeRelatedTo (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:65677:19)                                                                                          
    at isRelatedTo (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:65090:122)                                                                                                    
    at typeArgumentsRelatedTo (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:65508:25)                                                                                          
    at relateVariances (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:66341:23)                                                                                                 

Node.js v22.19.0

🙂 Expected behavior

The compiler should not crash.

Additional information about the issue

No response

Activity

  1. Andarist commented on Jan 12, 2026

    @Andarist
    Contributor

    Repros with (and this doesn't depend anyhow on unresolved identifiers/error types/etc):

    type Inner<A extends any[], A2 extends [...A, boolean]> = A2;
    
    export type Wrapper<A extends any[]> = Inner<
      A,
      [...A, boolean, boolean, boolean, boolean]
    >;
  2. RyanCavanaugh commented on Jan 12, 2026

    @RyanCavanaugh
    Member

    Repros in TS7 as well

  3. ahejlsberg commented on Jul 24, 2026

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptDomain: CrashesUnhandled exceptions/panics with no immediate primary root cause identifiedHelp WantedYou can do this

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions