refactor(types): 统一类型导入导出管理

- 将类型定义从各个模块统一到 type 文件中进行管理
- 移除 auth-session 中不再使用的 AuthSessionInput 和 AuthUser 类型导入
- 移除 game store 中多余的类型导入如 BetSelection、StartAutoHostingInput 等
- 将 i18n 模块中的 AppLanguage 类型改为从 type 文件导入
- 移除 mobile-header 中未使用的 MessageBroadcast 组件导入
- 统一各组件中的类型引用路径,全部指向 type 文件
- 修复 withdraw 组件中 currencies 映射的类型注解问题
- 更新 modal-store 中移除未使用的 ModalKey 类型导入
This commit is contained in:
JiaJun
2026-06-04 18:14:56 +08:00
parent a6b34660ad
commit 7999a5d709
20 changed files with 31 additions and 40 deletions

View File

@@ -22,12 +22,8 @@ import {
} from '@/features/game/shared' } from '@/features/game/shared'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import { useAuthStore } from '@/store/auth' import { useAuthStore } from '@/store/auth'
import { import { useGameAutoHostingStore, useGameRoundStore } from '@/store/game'
type RewardAnimationType, import type { BetSelection, RewardAnimationType } from '@/type'
useGameAutoHostingStore,
useGameRoundStore,
} from '@/store/game'
import type { BetSelection } from '@/type'
const REWARD_OVERLAY_FADE_OUT_MS = 300 const REWARD_OVERLAY_FADE_OUT_MS = 300
const REWARD_CHILDREN_FADE_IN_MS = 2_000 const REWARD_CHILDREN_FADE_IN_MS = 2_000

View File

@@ -1,11 +1,12 @@
import { useMutation } from '@tanstack/react-query' import { useMutation } from '@tanstack/react-query'
import { useRef } from 'react' import { useRef } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { createDeposit, type DepositTierItem } from '@/api' import { createDeposit } from '@/api'
import { DataLoadingIndicator } from '@/components/ui/data-loading-indicator' import { DataLoadingIndicator } from '@/components/ui/data-loading-indicator'
import { useDepositTierList } from '@/hooks/use-deposit-tier-list' import { useDepositTierList } from '@/hooks/use-deposit-tier-list'
import { notify } from '@/lib/notify' import { notify } from '@/lib/notify'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import type { DepositTierItem } from '@/type'
const PANEL_CLASS = const PANEL_CLASS =
'rounded-md border border-[rgba(110,229,243,0.24)] bg-[linear-gradient(180deg,rgba(7,30,43,0.9),rgba(3,15,26,0.94))] shadow-[inset_0_0_calc(var(--design-unit)*14)_rgba(88,225,238,0.08),0_0_calc(var(--design-unit)*10)_rgba(32,163,186,0.12)]' 'rounded-md border border-[rgba(110,229,243,0.24)] bg-[linear-gradient(180deg,rgba(7,30,43,0.9),rgba(3,15,26,0.94))] shadow-[inset_0_0_calc(var(--design-unit)*14)_rgba(88,225,238,0.08),0_0_calc(var(--design-unit)*10)_rgba(32,163,186,0.12)]'

View File

@@ -16,6 +16,7 @@ import { useWithdrawSubmit } from '@/hooks/use-withdraw-submit'
import { useWithdrawVm } from '@/hooks/use-withdraw-vm' import { useWithdrawVm } from '@/hooks/use-withdraw-vm'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import { useModalStore } from '@/store' import { useModalStore } from '@/store'
import type { FinanceCurrencyConfig } from '@/type'
const PANEL_CLASS = const PANEL_CLASS =
'rounded-md border border-[rgba(110,229,243,0.24)] bg-[linear-gradient(180deg,rgba(7,30,43,0.9),rgba(3,15,26,0.94))] shadow-[inset_0_0_calc(var(--design-unit)*14)_rgba(88,225,238,0.08),0_0_calc(var(--design-unit)*10)_rgba(32,163,186,0.12)]' 'rounded-md border border-[rgba(110,229,243,0.24)] bg-[linear-gradient(180deg,rgba(7,30,43,0.9),rgba(3,15,26,0.94))] shadow-[inset_0_0_calc(var(--design-unit)*14)_rgba(88,225,238,0.08),0_0_calc(var(--design-unit)*10)_rgba(32,163,186,0.12)]'
@@ -428,7 +429,7 @@ function DesktopWithdraw() {
/> />
</SelectTrigger> </SelectTrigger>
<SelectContent> <SelectContent>
{vm.config.currencies.map((option) => ( {vm.config.currencies.map((option: FinanceCurrencyConfig) => (
<SelectItem key={option.code} value={option.code}> <SelectItem key={option.code} value={option.code}>
{option.label} {option.label}
</SelectItem> </SelectItem>

View File

@@ -13,7 +13,6 @@ import chatImage from '@/assets/system/chat.webp'
import diamond from '@/assets/system/diamond.webp' import diamond from '@/assets/system/diamond.webp'
import logo from '@/assets/system/logo.webp' import logo from '@/assets/system/logo.webp'
import { SmartImage } from '@/components/smart-image.tsx' import { SmartImage } from '@/components/smart-image.tsx'
import { MessageBroadcast } from '@/features/game/components/desktop/desktop-title.tsx'
import { useHeaderClockLabel, useHeaderVm } from '@/hooks/use-header-vm' import { useHeaderClockLabel, useHeaderVm } from '@/hooks/use-header-vm'
import { useModalStore } from '@/store' import { useModalStore } from '@/store'

View File

@@ -1,11 +1,12 @@
import { useMutation } from '@tanstack/react-query' import { useMutation } from '@tanstack/react-query'
import { useRef } from 'react' import { useRef } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { createDeposit, type DepositTierItem } from '@/api' import { createDeposit } from '@/api'
import { DataLoadingIndicator } from '@/components/ui/data-loading-indicator' import { DataLoadingIndicator } from '@/components/ui/data-loading-indicator'
import { useDepositTierList } from '@/hooks/use-deposit-tier-list' import { useDepositTierList } from '@/hooks/use-deposit-tier-list'
import { notify } from '@/lib/notify' import { notify } from '@/lib/notify'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import type { DepositTierItem } from '@/type'
const PANEL_CLASS = const PANEL_CLASS =
'rounded-md border border-[rgba(110,229,243,0.24)] bg-[linear-gradient(180deg,rgba(7,30,43,0.9),rgba(3,15,26,0.94))] shadow-[inset_0_0_calc(var(--design-unit)*12)_rgba(88,225,238,0.08)]' 'rounded-md border border-[rgba(110,229,243,0.24)] bg-[linear-gradient(180deg,rgba(7,30,43,0.9),rgba(3,15,26,0.94))] shadow-[inset_0_0_calc(var(--design-unit)*12)_rgba(88,225,238,0.08)]'

View File

@@ -16,6 +16,7 @@ import { useWithdrawSubmit } from '@/hooks/use-withdraw-submit'
import { useWithdrawVm } from '@/hooks/use-withdraw-vm' import { useWithdrawVm } from '@/hooks/use-withdraw-vm'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import { useModalStore } from '@/store' import { useModalStore } from '@/store'
import type { FinanceCurrencyConfig } from '@/type'
const PANEL_CLASS = const PANEL_CLASS =
'rounded-md border border-[rgba(110,229,243,0.24)] bg-[linear-gradient(180deg,rgba(7,30,43,0.9),rgba(3,15,26,0.94))] shadow-[inset_0_0_calc(var(--design-unit)*10)_rgba(88,225,238,0.08)]' 'rounded-md border border-[rgba(110,229,243,0.24)] bg-[linear-gradient(180deg,rgba(7,30,43,0.9),rgba(3,15,26,0.94))] shadow-[inset_0_0_calc(var(--design-unit)*10)_rgba(88,225,238,0.08)]'
@@ -414,7 +415,7 @@ function MobileWithdraw() {
/> />
</SelectTrigger> </SelectTrigger>
<SelectContent> <SelectContent>
{vm.config.currencies.map((option) => ( {vm.config.currencies.map((option: FinanceCurrencyConfig) => (
<SelectItem key={option.code} value={option.code}> <SelectItem key={option.code} value={option.code}>
{option.label} {option.label}
</SelectItem> </SelectItem>

View File

@@ -1,4 +1,5 @@
import { type ModalKey, useModalStore } from '@/store' import { useModalStore } from '@/store'
import type { ModalKey } from '@/type'
export function useAuth() { export function useAuth() {
const setModalOpen = useModalStore((state) => state.setModalOpen) const setModalOpen = useModalStore((state) => state.setModalOpen)

View File

@@ -3,9 +3,9 @@ import { useForm } from 'react-hook-form'
import { loginWithPassword } from '@/api' import { loginWithPassword } from '@/api'
import i18n from '@/i18n' import i18n from '@/i18n'
import { notify } from '@/lib/notify' import { notify } from '@/lib/notify'
import { type LoginFormValues, loginFormSchema } from '@/schema/auth-schema' import { loginFormSchema } from '@/schema/auth-schema'
import { useAuthStore } from '@/store/auth' import { useAuthStore } from '@/store/auth'
import type { UseLoginFormOptions } from '@/type' import type { LoginFormValues, UseLoginFormOptions } from '@/type'
import { toAuthSubmitErrorKey } from './auth-error-key' import { toAuthSubmitErrorKey } from './auth-error-key'
import { createZodResolver } from './zod-form-resolver' import { createZodResolver } from './zod-form-resolver'

View File

@@ -1,9 +1,11 @@
import { useQuery } from '@tanstack/react-query' import { useQuery } from '@tanstack/react-query'
import { useMemo } from 'react' import { useMemo } from 'react'
import { type GamePeriodHistoryItemDto, getGamePeriodHistory } from '@/api' import { getGamePeriodHistory } from '@/api'
import { FLOWER_IMAGE_BY_ID } from '@/features/game/shared' import { FLOWER_IMAGE_BY_ID } from '@/features/game/shared'
import type { PeriodHistoryDisplayItem } from '@/type' import type { GamePeriodHistoryItemDto, PeriodHistoryDisplayItem } from '@/type'
export type { PeriodHistoryDisplayItem } from '@/type'
export const DEFAULT_PERIOD_HISTORY_LIMIT = 36 export const DEFAULT_PERIOD_HISTORY_LIMIT = 36

View File

@@ -7,12 +7,9 @@ import {
} from '@/constants' } from '@/constants'
import i18n from '@/i18n' import i18n from '@/i18n'
import { notify } from '@/lib/notify' import { notify } from '@/lib/notify'
import { import { registerFormSchema } from '@/schema/auth-schema'
type RegisterFormValues,
registerFormSchema,
} from '@/schema/auth-schema'
import { useAuthStore } from '@/store/auth' import { useAuthStore } from '@/store/auth'
import type { UseRegisterFormOptions } from '@/type' import type { RegisterFormValues, UseRegisterFormOptions } from '@/type'
import { toAuthSubmitErrorKey } from './auth-error-key' import { toAuthSubmitErrorKey } from './auth-error-key'
import { createZodResolver } from './zod-form-resolver' import { createZodResolver } from './zod-form-resolver'

View File

@@ -1,8 +1,9 @@
import { useMutation } from '@tanstack/react-query' import { useMutation } from '@tanstack/react-query'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { createWithdraw, type WithdrawCreateRequestDto } from '@/api' import { createWithdraw } from '@/api'
import { notify } from '@/lib/notify' import { notify } from '@/lib/notify'
import type { WithdrawCreateRequestDto } from '@/type'
export function useWithdrawSubmit() { export function useWithdrawSubmit() {
const { i18n, t } = useTranslation() const { i18n, t } = useTranslation()

View File

@@ -1,6 +1,5 @@
import { useCallback, useEffect, useMemo, useState } from 'react' import { useCallback, useEffect, useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import type { DepositWithdrawConfig } from '@/api'
import { import {
DEFAULT_CURRENCY_CODE, DEFAULT_CURRENCY_CODE,
DEFAULT_WITHDRAW_CONFIG, DEFAULT_WITHDRAW_CONFIG,
@@ -10,6 +9,7 @@ import {
} from '@/constants' } from '@/constants'
import { useDepositWithdrawConfig } from '@/hooks/use-deposit-withdraw-config' import { useDepositWithdrawConfig } from '@/hooks/use-deposit-withdraw-config'
import { useAuthStore } from '@/store' import { useAuthStore } from '@/store'
import type { DepositWithdrawConfig } from '@/type'
function formatNumber(locale: string, value: number) { function formatNumber(locale: string, value: number) {
return new Intl.NumberFormat(locale).format(value) return new Intl.NumberFormat(locale).format(value)

View File

@@ -7,6 +7,7 @@ import idID from '@/locales/id-ID'
import msMY from '@/locales/ms-MY' import msMY from '@/locales/ms-MY'
import zhCN from '@/locales/zh-CN' import zhCN from '@/locales/zh-CN'
import { getStoredAppLanguage, setStoredAppLanguage } from '@/store/auth' import { getStoredAppLanguage, setStoredAppLanguage } from '@/store/auth'
import type { AppLanguage } from '@/type'
export type { AppLanguage } from '@/type' export type { AppLanguage } from '@/type'
@@ -45,7 +46,7 @@ export function getLanguageFromPathname(pathname: string) {
} }
void i18n.use(initReactI18next).init({ void i18n.use(initReactI18next).init({
lng: getInitialLanguage(), lng: getInitialLanguage() ?? DEFAULT_APP_LANGUAGE,
fallbackLng: DEFAULT_APP_LANGUAGE, fallbackLng: DEFAULT_APP_LANGUAGE,
debug: false, debug: false,
interpolation: { interpolation: {

View File

@@ -9,8 +9,6 @@ import { queryClient } from '@/lib/query/query-client'
import { useAuthStore } from '@/store/auth' import { useAuthStore } from '@/store/auth'
import { useModalStore } from '@/store/modal' import { useModalStore } from '@/store/modal'
import type { import type {
AuthSessionInput,
AuthUser,
ClearAuthenticatedSessionOptions, ClearAuthenticatedSessionOptions,
CurrentUserInitializer, CurrentUserInitializer,
RefreshSessionHandler, RefreshSessionHandler,

View File

@@ -10,12 +10,12 @@ import { notify } from '@/lib/notify'
import { useModalStore } from '@/store' import { useModalStore } from '@/store'
import { useAuthStore } from '@/store/auth' import { useAuthStore } from '@/store/auth'
import { import {
type AutoHostingStopRules,
selectSelectionTotal, selectSelectionTotal,
useGameAutoHostingStore, useGameAutoHostingStore,
useGameRoundStore, useGameRoundStore,
useGameSessionStore, useGameSessionStore,
} from '@/store/game' } from '@/store/game'
import type { AutoHostingStopRules } from '@/type'
function parseAmount(value: string) { function parseAmount(value: string) {
const parsed = Number(value) const parsed = Number(value)

View File

@@ -10,12 +10,12 @@ import { notify } from '@/lib/notify'
import { useModalStore } from '@/store' import { useModalStore } from '@/store'
import { useAuthStore } from '@/store/auth' import { useAuthStore } from '@/store/auth'
import { import {
type AutoHostingStopRules,
selectSelectionTotal, selectSelectionTotal,
useGameAutoHostingStore, useGameAutoHostingStore,
useGameRoundStore, useGameRoundStore,
useGameSessionStore, useGameSessionStore,
} from '@/store/game' } from '@/store/game'
import type { AutoHostingStopRules } from '@/type'
function parseAmount(value: string) { function parseAmount(value: string) {
const parsed = Number(value) const parsed = Number(value)

View File

@@ -5,7 +5,8 @@ import {
PASSWORD_MAX_LENGTH, PASSWORD_MAX_LENGTH,
PASSWORD_MIN_LENGTH, PASSWORD_MIN_LENGTH,
} from '@/constants' } from '@/constants'
import type { LoginFormValues, RegisterFormValues } from '@/type'
export type { LoginFormValues, RegisterFormValues } from '@/type'
const usernameSchema = z const usernameSchema = z
.string() .string()

View File

@@ -1,12 +1,7 @@
import { create } from 'zustand' import { create } from 'zustand'
import { AUTO_HOSTING_DEFAULT_SINGLE_WIN_THRESHOLD } from '@/constants' import { AUTO_HOSTING_DEFAULT_SINGLE_WIN_THRESHOLD } from '@/constants'
import type { import type { AutoHostingStopRules, GameAutoHostingStoreState } from '@/type'
AutoHostingStopRules,
BetSelection,
GameAutoHostingStoreState,
StartAutoHostingInput,
} from '@/type'
const DEFAULT_AUTO_HOSTING_RULES: AutoHostingStopRules = { const DEFAULT_AUTO_HOSTING_RULES: AutoHostingStopRules = {
stopIfBalanceBelow: { stopIfBalanceBelow: {

View File

@@ -13,13 +13,9 @@ import type {
Chip, Chip,
GameCell, GameCell,
GameRoundSlice, GameRoundSlice,
GameRoundStoreData,
GameRoundStoreState, GameRoundStoreState,
HistoryEntry, HistoryEntry,
RevealAnimationPhase,
RevealAnimationState, RevealAnimationState,
RewardAnimationType,
RoundPhase,
RoundSnapshot, RoundSnapshot,
TrendEntry, TrendEntry,
} from '@/type' } from '@/type'

View File

@@ -1,6 +1,6 @@
import { create } from 'zustand' import { create } from 'zustand'
import { INITIAL_MODAL_VISIBILITY, MODAL_KEYS } from '@/constants' import { INITIAL_MODAL_VISIBILITY, MODAL_KEYS } from '@/constants'
import type { ModalKey, ModalStoreState } from '@/type' import type { ModalStoreState } from '@/type'
export { MODAL_KEYS } export { MODAL_KEYS }