Búsqueda de sitios web

javascript - Solicitar permiso de DeviceMotionEvent con Typescript


Implementando una solicitud de permiso de giroscopio, pero obtengo un error de TypeScript en requestPermission

Mi código:

if (typeof (DeviceMotionEvent) !== 'undefined' && typeof (DeviceMotionEvent.requestPermission) === 'function') {
        return DeviceMotionEvent.requestPermission()
            .then((response: string) => response === 'granted');
}
TS2339: Property 'requestPermission' does not exist on type '{ new (type: string, eventInitDict?: 
DeviceMotionEventInit): DeviceMotionEvent; prototype: DeviceMotionEvent; }'.

Luchando un poco con este. Intenté solicitar permiso de esta manera (DeviceMotionEvent.requestPermission() como cualquier) pero sigue igual. Como no es un módulo, no puedo simplemente hacer yarn add @types/...

Respuesta #1

Por favor, intenta evitar convertir tipos a any, ya que es malo y en su lugar intenta acotar el tipo.

Extender el evento nativo de la API Web DeviceOrientationEvent para dispositivos iOS:

interface DeviceOrientationEventiOS extends DeviceOrientationEvent {
  requestPermission?: () => Promise<'granted' | 'denied'>;
}

const requestPermission = (DeviceOrientationEvent as unknown as DeviceOrientationEventiOS).requestPermission;
const iOS = typeof requestPermission === 'function';
if (iOS) {
    const response = await requestPermission();
    if (response === 'granted') {
      // execute
    }
}

Respuesta #2

Necesitas convertir el objeto, no la función, intenta esto:

(DeviceMotionEvent as any).requestPermission() 

Artículos relacionados