/** * 全局 Window 增强 * * 集中声明第三方 SDK 在 window 上挂载的全局变量。 * 单文件能让 TS 编译器在全局范围找到这些属性。 */ export {}; declare global { interface Window { google?: { accounts: { id: { initialize(params: { client_id: string; callback: (response: { credential?: string; select_by?: string }) => void; auto_select?: boolean; cancel_on_tap_outside?: boolean; }): void; prompt(): void; renderButton( parent: HTMLElement, options: { type?: "standard" | "icon"; theme?: "outline" | "filled_blue" | "filled_black"; size?: "large" | "medium" | "small"; text?: "signin_with" | "signup_with" | "continue_with" | "signin"; shape?: "rectangular" | "pill" | "circle" | "square"; logo_alignment?: "left" | "center"; width?: number; locale?: string; }, ): void; disableAutoSelect(): void; }; }; }; FB?: { init(params: { appId: string; cookie?: boolean; xfbml?: boolean; version: string; }): void; login( callback: (response: { authResponse?: { accessToken: string; userID: string; expiresIn: number; }; status?: "connected" | "not_authorized" | "unknown"; }) => void, options?: { scope: string }, ): void; logout(callback?: () => void): void; api( path: string, callback: (response: { id?: string; name?: string; email?: string; picture?: { data?: { url?: string } }; }) => void, ): void; }; fbAsyncInit?: () => void; // Web Speech API SpeechRecognition?: new () => SpeechRecognitionInstance; webkitSpeechRecognition?: new () => SpeechRecognitionInstance; } interface SpeechRecognitionInstance extends EventTarget { lang: string; continuous: boolean; interimResults: boolean; maxAlternatives: number; onresult: ((event: SpeechRecognitionEvent) => void) | null; onerror: ((event: SpeechRecognitionErrorEvent) => void) | null; onend: ((event: Event) => void) | null; onstart: ((event: Event) => void) | null; start(): void; stop(): void; abort(): void; } interface SpeechRecognitionEvent extends Event { resultIndex: number; results: SpeechRecognitionResultList; } interface SpeechRecognitionErrorEvent extends Event { error: string; message: string; } interface SpeechRecognitionResultList { readonly length: number; item(index: number): SpeechRecognitionResult; [index: number]: SpeechRecognitionResult; } interface SpeechRecognitionResult { readonly length: number; item(index: number): SpeechRecognitionAlternative; isFinal: boolean; [index: number]: SpeechRecognitionAlternative; } interface SpeechRecognitionAlternative { transcript: string; confidence: number; } }