Estoy usando dotenv para declarar la variable env JWT_SECRET y muestra el error mencionado en el título.
.env
NODE_ENV="development" JWT_SECRET="mySecretString"medio ambiente.d.ts
import { Secret } from 'jwt-promisify' declare global { namespace NodeJS { interface ProcessEnv { JWT_SECRET: Secret, NODE_ENV: 'development' | 'production', PORT?: number | string } } } export {} Estoy usando en mi archivo de rutas estoy firmando token con JWT_SECRET
ruta.ts
const token = await jwt.sign({ id: newUser.id }, process.env.JWT_SECRET)Aquí intellisense funciona, pero cuando ejecuto la aplicación o la compilo, aparece el error.
error
error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'Secret'. Type 'undefined' is not assignable to type 'Secret'. 32 const token = await jwt.sign({ id: newUser.id }, process.env.JWT_SECRET) ~~~~~~~~~~~~~~~~~~~~~~ jwt.sign(data, process.env.SIGNATURE_KEY as string, { expiresIn: '30d', algorithm: "HS256" }, (err, encoded)=>{ err ? reject(err) : resolve(encoded) }) Para Typescript, creo que Type casting funciona. Tampoco implementé async-await porque el método de firma no se insinuó como Promise . ¡Pero supongo que también funciona!
El problema aquí es que typeof process.env.JWT_SECRET es una cadena o no está definido. Así que podrías hacer:
const token = await jwt.sign({ id: newUser.id }, process.env.JWT_SECRET || "")