Tengo una aplicación nodejs y estoy usando Typescript para ella y he implementado Clases e interfaces para los Modelos para Db. También tengo una clase de usuario modelo con interfaz. Simplemente quiero enviar una notificación y estoy usando un código básico de Puhser como este
let pusher = new Pusher({ appId: process.env.PUSHER_APP_ID, key: process.env.PUSHER_APP_KEY, secret: process.env.PUSHER_APP_SECRET, cluster: process.env.PUSHER_APP_CLUSTER }); pusher.trigger('notifications', 'user_added', user, req.headers['x-socket-id']);Pensé que sería simple pero da el siguiente error en todos los campos como appId, clave, etc.
(propiedad) appId: cadena | indefinido Tipo 'cadena | undefined' no se puede asignar al tipo 'cadena'. El tipo 'indefinido' no se puede asignar al tipo 'string'.ts(2322) index.d.ts(45, 5): el tipo esperado proviene de la propiedad 'appId' que se declara aquí en el tipo 'Opciones'
Intenté usar la variable pusher como interfaz pero pusher es un sistema de terceros que probé
let pusher = new Pusher({ const appId: string = process.env.PUSHER_APP_ID, const key: string = process.env.PUSHER_APP_KEY, const secret: string = process.env.PUSHER_APP_SECRET, const cluster: string = process.env.PUSHER_APP_CLUSTER }); type herePuede convertir las variables de entorno en una cadena.
let pusher = new Pusher({ appId: process.env.PUSHER_APP_ID as string, key: process.env.PUSHER_APP_KEY as string, secret: process.env.PUSHER_APP_SECRET as string, cluster: process.env.PUSHER_APP_CLUSTER as string, });porque el valor de process.env.PUSHER_APP_ID no está definido console.log(process.env.PUSHER_APP_ID) check value
El tipo de devolución que obtiene de process.env será del tipo yourRequiredType | undefined porque podría existir o no y eso es lo que Typescript está tratando de decirle.
Tienes dos opciones:
Puede definir las propiedades de su objeto para que sean del Tipo deseado o indefinido;
Puede implementar un Typeguard para garantizar que se pase el tipo correcto de la siguiente manera:
const stringTypeGuard = (x: desconocido): x es una cadena => tipo de x === cadena
antes de pasar su objeto a la base de datos, puede usar esto para garantizar que sus propiedades sean las que desea