microsoft/TypeScript

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

Open

Aperta il 11 gen 2026

Vedi su GitHub
 (2 commenti) (0 reazioni) (0 assegnatari)TypeScript (108.860 star) (13.395 fork)batch import
BugDomain: CrashesHelp Wanted

Descrizione

🔎 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

Guida contributor