refactor: eliminate as any type casts across 18 source files
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m34s

- Fix computeDisciplineEffects() to not require GameState parameter
- Fix getUnifiedEffects() to accept proper partial state type
- Replace upgradeEffects as any with proper UnifiedEffects type
- Replace explicit : any annotations with proper types (ComputedEffects, DesignProgress, SpellDef, etc.)
- Fix activity-log.ts eventType casting
- Fix crafting-design.ts computedEffects and designProgress types
- Fix page.tsx grimoire spell rendering with proper SpellDef property names
- Fix StatsTab ManaStatsSection with proper ManaStatsEffects interface
- Remove unused imports (useDisciplineStore from page.tsx, LeftPanel.tsx)

Remaining: 1 as any in craftingStore.ts (pre-existing CraftingStore/GameState architectural mismatch)
This commit is contained in:
2026-05-20 17:22:52 +02:00
parent df316c2865
commit 742a992d59
36 changed files with 1820 additions and 1460 deletions
@@ -1,6 +1,6 @@
'use client';
import type { FloorState, EnemyState } from '@/lib/game/types';
import type { FloorState, EnemyState, RoomType } from '@/lib/game/types';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
import { Progress } from '@/components/ui/progress';
@@ -73,14 +73,14 @@ function EnemyRow({ enemy, floor }: { enemy: EnemyState; floor: number }) {
}
export function RoomDisplay({ floorState, floor }: RoomDisplayProps) {
const roomDisplay = getSpireRoomTypeDisplay(floorState.roomType as any);
const roomDisplay = getSpireRoomTypeDisplay(floorState.roomType as RoomType);
// Handle special room types (cast to string for extended types)
const rt = floorState.roomType as string;
if (rt === 'recovery') {
const progress = (floorState as any).puzzleProgress || 0;
const required = (floorState as any).puzzleRequired || 1;
const progress = floorState.puzzleProgress || 0;
const required = floorState.puzzleRequired || 1;
return (
<Card className="bg-gray-900/80 border-green-800/40">
<CardHeader className="pb-2">
@@ -78,8 +78,7 @@ export function SpireCombatPage() {
const equipmentInstances = useCraftingStore((s) => s.equipmentInstances);
// Discipline effects
const disciplineStoreState = useDisciplineStore();
const disciplineEffects = computeDisciplineEffects(disciplineStoreState as any);
const disciplineEffects = computeDisciplineEffects();
// Compute derived stats
const upgradeEffects = getUnifiedEffects({
@@ -94,7 +93,7 @@ export function SpireCombatPage() {
prestigeUpgrades,
skillUpgrades: {},
skillTiers: {},
}, upgradeEffects as any, disciplineEffects);
}, upgradeEffects, disciplineEffects);
const baseRegen = computeRegen({
skills: {},
@@ -102,7 +101,7 @@ export function SpireCombatPage() {
skillUpgrades: {},
skillTiers: {},
attunements: {},
}, upgradeEffects as any, disciplineEffects);
}, upgradeEffects, disciplineEffects);
// Total rooms for current floor
const totalRooms = useMemo(() => getRoomsForFloor(currentFloor), [currentFloor]);