Tipo no asignable (TypeScript 4.1.2)
Estoy usando esta pieza de código de un viejo proyecto (typescript 2) pero no está funcionando con el typescript 4.1.2. Estoy tratando de manejar eventos de clic en la notificación de escritorio de una aplicación de electrones (proceso de remitente):
const nativeNotification = window.Notification;
const ProxyNotification = (title: any, options: any) => {
const mirrorNotification = new nativeNotification(title, options);
mirrorNotification.onclick = () => {
// Handle click event.
};
};
ProxyNotification.permission = nativeNotification.permission;
ProxyNotification.requestPermission = nativeNotification.requestPermission;
window.Notification = ProxyNotification;
La última línea lanza este error:
Tipo '{ (título: string, options?: NotificationOptions): void; permiso: NotificaciónPermisión; maxActions: número; prototipo: Notificación; solicitudPermiso: (Callback independiente?: NotificaciónPermissionCallback) = título Promesa hecha... para escribir '{ nuevo (título: string, options?: NotificaciónOpciones: Notificación; prototipo: Notificación; sólo lectura maxActions: número; permiso de lectura: NotificationPermission; requestPermission(deprecatedCallback?: NotificaciónPermissionCallback: Promesa realizada... }' Tipo '{ (título: string, options?: NotificationOptions): void; permission: Notificación Permiso; maxActions: número; prototipo: Notificación; requestPermission: (deprecatedCallback?: NotificaciónPermissionCallback) = prometido garantizado garantizado... para la firma 'nuevo (título: cadena, opciones?: NotificaciónOpciones: Notificación.
Le agradecería ayuda para arreglarlo.
Saludos.
Pregunta hecha hace 3 años, 4 meses, 29 días - Por codejuggernaut
3 Respuestas:
-
Supongo que quieres extender la ventana nativa. Notificación. Así es como haría esto:
const nativeNotification = window.Notification; class ProxyNotification extends Notification { constructor(title: string, options?: NotificationOptions | undefined) { super(title, options) } customMethod() { console.log('hello') } /** * Here you can define your own methods and properties */ } window.Notification = ProxyNotification
Respondida el Dec 18, 2020 a las 15:17 - por scriptsculptorbf10
Votos positivos: 0 | Votos negativos: 0 -
El error que estás viendo se debe a que el código que estás intentando usar no es compatible con TypeScript 4.1.2 debido a los cambios en la forma en que se manejan las definiciones de tipos en las versiones más recientes.
Para corregir este error, puedes intentar cambiar el tipo de las propiedades para que coincidan con las definiciones de tipo actualizadas de la interfaz
Notification
. Aquí te dejo una versión modificada de tu código que debería funcionar con TypeScript 4.1.2:typescript const nativeNotification = window.Notification; const ProxyNotification = class ProxyNotification { static permission: NotificationPermission = nativeNotification.permission; static requestPermission: (deprecatedCallback?: NotificationPermissionCallback) => Promise
= nativeNotification.requestPermission.bind(nativeNotification); constructor(title: string, options?: NotificationOptions) { const mirrorNotification = new nativeNotification(title, options); mirrorNotification.onclick = () => { // Handle click event. }; } }; window.Notification = ProxyNotification as any; Con estos cambios, el código debería ser compatible con TypeScript 4.1.2 y debería permitir que manejes los eventos de clic en las notificaciones de escritorio de Electron como esperas.
Prueba este código y avísame si aún tienes problemas o si necesitas más ayuda. ¡Saludos!
Respondida el Dec 19, 2020 a las 15:16 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El error que estás experimentando se debe a un cambio en la forma en que TypeScript maneja las funciones de constructor en TypeScript 4.1.2. En versiones anteriores de TypeScript, era posible asignar una función de constructor a una variable o propiedad sin especificar explícitamente el tipo de retorno de la función. Sin embargo, en TypeScript 4.1.2, esto ya no está permitido y se debe especificar explícitamente el tipo de retorno de la función.
Para solucionar este problema, puedes agregar un tipo de retorno explícito a la función
ProxyNotification
de la siguiente manera:typescript const ProxyNotification: new (title: string, options?: NotificationOptions) => Notification = (title: any, options: any) => { const mirrorNotification = new nativeNotification(title, options); mirrorNotification.onclick = () => { // Handle click event. }; return mirrorNotification; };
Esto le indica a TypeScript que la función
ProxyNotification
devuelve una instancia de la claseNotification
.Además, también debes asegurarte de que el tipo de la variable
window.Notification
coincida con el tipo de retorno de la funciónProxyNotification
. Puedes hacerlo de la siguiente manera:typescript window.Notification = ProxyNotification as typeof Notification;
Estos cambios deberían resolver el error y permitirte utilizar el código en TypeScript 4.1.2.
Respondida el Dec 19, 2020 a las 15:30 - por Gemini
Votos positivos: 0 | Votos negativos: 0