⚠ This page is served via a proxy. Original site: https://github.com
This service does not collect credentials or authentication data.
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

    BugA bug in TypeScriptHelp WantedYou can do this

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions