Skip to content

Spurious TS4094 "exported anonymous class type may not be private" error after upgrading from TS6 to TS7Β #64249

Description

πŸ”Ž Search Terms

TS4094, exported anonymous class, private, declaration

πŸ•— Version & Regression Information

  • This changed between versions 6.0.3 and 7.0.2

⏯ Playground Link

https://github.com/jedwards1211/ts-4094-regression

πŸ’» Code

import ZodRoute from "zod-route-schemas";
import z from "zod";

export const organization = new ZodRoute(
  "/org/:organizationId",
  z.object({ organizationId: z.number() }),
);

πŸ™ Actual behavior

> tsc

src/index.ts:4:14 - error TS4094: Property 'parts' of exported anonymous class type may not be private or protected.

4 export const organization = new ZodRoute(
               ~~~~~~~~~~~~

  src/index.ts:4:14 - Add a type annotation to the variable organization.
    4 export const organization = new ZodRoute(
                   ~~~~~~~~~~~~

src/index.ts:4:14 - error TS4094: Property 'typeHints' of exported anonymous class type may not be private or protected.

4 export const organization = new ZodRoute(
               ~~~~~~~~~~~~

  src/index.ts:4:14 - Add a type annotation to the variable organization.
    4 export const organization = new ZodRoute(
                   ~~~~~~~~~~~~

I don't see what the problem is here, because as you can see below, the generated .d.ts would have the private field types from the class declaration in zod-route-schemas.

πŸ™‚ Expected behavior

Outputs the following .d.ts like TS5/6:

import ZodRoute from "zod-route-schemas";
import z from "zod";
export declare const organization: ZodRoute<"/org/:organizationId", z.ZodObject<{
    organizationId: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
    organizationId: number;
}, {
    organizationId: number;
}>, z.ZodType<{
    organizationId: number;
}, any, {
    organizationId: number;
}>, z.ZodType<{
    organizationId: number;
}, any, {
    organizationId: number;
}>>;
//# sourceMappingURL=index.d.ts.map

Additional information about the issue

Doesn't happen with "module": "preserve", but happens with "commonjs", "nodenext", maybe others

ZodRoute declaration in zod-route-schemas/index.d.ts:

declare class ZodRoute<Pattern extends string, Schema extends SchemaForPattern<Pattern>, FormatSchema extends InvertSchema<Schema> = InvertSchema<Schema>, PartialFormatSchema extends PartialSchema<FormatSchema> = PartialSchema<FormatSchema>> {
  readonly pattern: Pattern;
  readonly schema: Schema;
  private parts;
  readonly formatSchema: FormatSchema;
  readonly partialFormatSchema: PartialFormatSchema;
  readonly exact: boolean;
  private typeHints?;

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions