options: ZodReadonly< ZodObject< { allOrNothing: ZodDefault<ZodBoolean>; cardCycle: ZodDefault<ZodBoolean>; deckPlays: ZodDefault<ZodBoolean>; detrimentalCharacters: ZodDefault<ZodBoolean>; emptyClues: ZodDefault<ZodBoolean>; maxPlayers: ZodOptional< ZodType<2 | 3 | 4 | 5 | 6, ZodTypeDef, 2 | 3 | 4 | 5 | 6>, >; numPlayers: ZodDefault< ZodType<2 | 3 | 4 | 5 | 6, ZodTypeDef, 2 | 3 | 4 | 5 | 6>, >; oneExtraCard: ZodDefault<ZodBoolean>; oneLessCard: ZodDefault<ZodBoolean>; speedrun: ZodDefault<ZodBoolean>; startingPlayer: ZodDefault<ZodType<PlayerIndex, ZodTypeDef, PlayerIndex>>; tableName: ZodOptional<ZodString>; timeBase: ZodDefault<ZodNumber>; timed: ZodDefault<ZodBoolean>; timePerTurn: ZodDefault<ZodNumber>; variantName: ZodDefault<ZodString>; }, "strict", ZodTypeAny, { allOrNothing: boolean; cardCycle: boolean; deckPlays: boolean; detrimentalCharacters: boolean; emptyClues: boolean; maxPlayers?: 3 | 2 | 4 | 5 | 6; numPlayers: 2 | 3 | 4 | 5 | 6; oneExtraCard: boolean; oneLessCard: boolean; speedrun: boolean; startingPlayer: PlayerIndex; tableName?: string; timeBase: number; timed: boolean; timePerTurn: number; variantName: string; }, { allOrNothing?: boolean; cardCycle?: boolean; deckPlays?: boolean; detrimentalCharacters?: boolean; emptyClues?: boolean; maxPlayers?: 3 | 2 | 4 | 5 | 6; numPlayers?: 3 | 2 | 4 | 5 | 6; oneExtraCard?: boolean; oneLessCard?: boolean; speedrun?: boolean; startingPlayer?: PlayerIndex; tableName?: string; timeBase?: number; timed?: boolean; timePerTurn?: number; variantName?: string; }, >,> = ...
We use a Zod object instead of a class because this is sent over the wire and Zod cannot validate class shapes.