Skip to content

Typescript build fails with generic types #42

Description

@totalolage

Edit: this is solved by updating the packates (using ncu -u in my case)

Running the rollup build fails on the typescript plugin step, complaining about a recursive definition.

src/index.ts → dist/index.js, dist/index.es.js...
[!] (plugin typescript) Error: @rollup/plugin-typescript TS2456: Type alias 'UpTo' circularly references itself.
src/index.ts (34:6)

34 type UpTo<T extends readonly any[], K extends T[number]> = K extends First<T> ? K : (K | UpTo<T, Previous<T, K>>);
        ~~~~

Error: @rollup/plugin-typescript TS2456: Type alias 'UpTo' circularly references itself.
    at error (use-date-countdown/node_modules/rollup/dist/shared/rollup.js:5279:30)
    at throwPluginError (use-date-countdown/node_modules/rollup/dist/shared/rollup.js:18240:12)
    at Object.error (use-date-countdown/node_modules/rollup/dist/shared/rollup.js:18847:24)
    at emitDiagnostic (use-date-countdown/node_modules/@rollup/plugin-typescript/dist/index.js:415:17)
    at reportDiagnostics (use-date-countdown/node_modules/@rollup/plugin-typescript/dist/index.js:423:9)
    at Array.forEach (<anonymous>)
    at emitFilesAndReportErrors (use-date-countdown/node_modules/typescript/lib/typescript.js:105333:21)
    at Object.result.afterProgramCreate (use-date-countdown/node_modules/typescript/lib/typescript.js:105503:13)
    at Object.afterProgramCreate (use-date-countdown/node_modules/@rollup/plugin-typescript/dist/index.js:515:29)
    at synchronizeProgram (use-date-countdown/node_modules/typescript/lib/typescript.js:105767:22)

Compiling purely with typescript tsc goes through without error. The UpTo type is recursive but not infinite:

type Pop<A extends readonly any[]> = ((...all: A) => void) extends ((popped: any, ...rest: infer R) => void) ? R : [];
type Push<I, R extends readonly any[]> = ((item: I, ...rest: R) => void) extends ((...all: infer A) => void) ? A : unknown;
type Rev<A extends readonly any[], P extends readonly any[] = []> = 0 extends A["length"] ? P : Rev<Pop<A>, Push<A[0], P>>;
type Next<A extends readonly any[], I extends A[number]> = 0 extends A["length"] ? never : 1 extends A["length"] ? never : I extends A[0] ? A[1] : Next<Pop<A>, I>;
type Previous<A extends readonly any[], I extends A[number]> = Next<Rev<A>, I>;
type UpTo<A extends readonly any[], I extends A[number]> = I extends A[0] ? I : (I | UpTo<A, Previous<A, I>>);

Activity

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions