Skip to content

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

@na7ure-a

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions