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()
