fix: resolve linter and type check errors in TTS code

This commit is contained in:
Gigi
2025-10-20 22:09:28 +02:00
parent fdb52fe3b2
commit e2de6f2d91
2 changed files with 15 additions and 4 deletions

View File

@@ -16,7 +16,7 @@ const SPEED_OPTIONS = [0.8, 1, 1.2, 1.4, 1.6, 1.8, 2, 2.1, 2.4, 2.8, 3]
const TTSControls: React.FC<Props> = ({ text, defaultLang, className, settings }) => {
const {
supported, speaking, paused,
speak, pause, resume, stop,
speak, pause, resume,
rate, setRate
} = useTextToSpeech({ defaultLang, defaultRate: settings?.ttsDefaultSpeed })

View File

@@ -1,5 +1,14 @@
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
// Web Speech API types
type SpeechSynthesisVoice = {
name: string
voiceURI: string
lang: string
localService: boolean
default: boolean
}
export interface UseTTSOptions {
defaultLang?: string
defaultRate?: number
@@ -54,9 +63,10 @@ export function useTextToSpeech(options: UseTTSOptions = {}): UseTTS {
}
load()
// Safari/Chrome fire 'voiceschanged'
synth!.addEventListener?.('voiceschanged', load as EventListener)
const handleVoicesChanged = () => load()
synth!.addEventListener('voiceschanged', handleVoicesChanged)
return () => {
synth!.removeEventListener?.('voiceschanged', load as EventListener)
synth!.removeEventListener('voiceschanged', handleVoicesChanged)
}
}, [supported, defaultLang, voice, synth])
@@ -72,7 +82,8 @@ export function useTextToSpeech(options: UseTTSOptions = {}): UseTTS {
if (!supported || !text?.trim()) return
// stopping any current speech first is safer for iOS
synth!.cancel()
const u = new SpeechSynthesisUtterance(text)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const u = new (window as any).SpeechSynthesisUtterance(text) as SpeechSynthesisUtterance
u.lang = langOverride || voice?.lang || defaultLang
if (voice) u.voice = voice
u.rate = rate