Dire que j'ai ce fichier .env.local
:
SOME_VAR="c'est très secret"
SOME_OTHER_VAR="ce n'est pas si secret, mais doit être différent pendant les tests"
y a-t-il un moyen de faire en sorte que typescript crée un type comme celui-ci de manière programmatique :
type TEnv = 'SOME_VAR' | 'SOME_OTHER_VAR'
Le cas d'utilisation que j'ai se présente comme ceci
export default function env(clé: TEnv): string {
return process.env[clé] || Cypress.env(clé)
}
Je pense que je pourrais peut-être déclencher un script qui lit les clés via dotenv
(ou bash) et qui écrit ensuite un fichier types.d.ts avec elles... Mais je voulais juste savoir s'il existe déjà un moyen en TS de faire cela ?
Mon dernier essai ressemble à ceci
import dotenv from 'dotenv'
class DynamicArray {
ajouter(valeur: T): Array {
let collection = new Array()
collection.push(valeur)
return collection
}
}
const TEnvClé = new DynamicArray()
const fichierEnv = dotenv.config({ path: '.env.local' }).parsed
Object.keys(fichierEnv).forEach((clé) => TEnvClé.ajouter(clé))
export default function env(variable: TEnvClé): string {
return process.env[variable] || Cypress.env(variable)
}
Mais cela ne fonctionne pas...
Note annexe
Le webpack utilisé par NextJS n'autorise pas process.env[clé]
et Cypress lancera une erreur de référence. J'ai donc dû faire ceci :
export default function env(clé: TEnvClé): string {
try {
// doive essayer attraper à cause de l'erreur de référence Cypress
return Cypress.env(clé)
} catch {
switch (clé) {
case 'SOME_VAR':
return process.env.SOME_VAR
case 'SOME_OTHER_VAR':
return process.env.SOME_OTHER_VAR
default:
return undefined
}
}
}