// Module-scoped Web Speech types keep the public declarations usable without // ambient @types/dom-speech-recognition or browser-specific globals. export type SpeechRecognitionErrorCode = | 'aborted' | 'audio-capture' | 'bad-grammar' | 'language-not-supported' | 'network' | 'no-speech' | 'not-allowed' | 'service-not-allowed' | 'phrases-not-supported'; export interface SpeechRecognitionEvent extends Event { readonly resultIndex: number; readonly results: SpeechRecognitionResultList; } export interface SpeechRecognitionErrorEvent extends Event { readonly error: SpeechRecognitionErrorCode; readonly message: string; } interface SpeechRecognitionEventMap { audioend: Event; audiostart: Event; end: Event; error: SpeechRecognitionErrorEvent; nomatch: SpeechRecognitionEvent; result: SpeechRecognitionEvent; soundend: Event; soundstart: Event; speechend: Event; speechstart: Event; start: Event; } type SpeechRecognitionEventHandlers = { [K in keyof SpeechRecognitionEventMap as `on${K}`]: | ((this: SpeechRecognition, event: SpeechRecognitionEventMap[K]) => void) | null; }; interface SpeechGrammar { src: string; weight: number; } interface SpeechGrammarList { readonly length: number; addFromString(grammar: string, weight?: number): void; addFromURI(src: string, weight?: number): void; item(index: number): SpeechGrammar; [index: number]: SpeechGrammar; } /** Browser speech recognizer returned by SpeechRecognizer.recognition. */ export interface SpeechRecognition extends EventTarget, SpeechRecognitionEventHandlers { continuous: boolean; grammars: SpeechGrammarList; interimResults: boolean; lang: string; maxAlternatives: number; abort(): void; start(audioTrack?: MediaStreamTrack): void; stop(): void; addEventListener( type: K, listener: ( this: SpeechRecognition, event: SpeechRecognitionEventMap[K] ) => void, options?: boolean | AddEventListenerOptions ): void; addEventListener( type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions ): void; removeEventListener( type: K, listener: ( this: SpeechRecognition, event: SpeechRecognitionEventMap[K] ) => void, options?: boolean | EventListenerOptions ): void; removeEventListener( type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions ): void; }