有没有办法使用带有TypeORM和TypeScripts的动态env变量来解决或绕过类型错误?

时间:2019-11-28 09:23:09

标签: typescript express typeorm

我正在使用TsED框架(基本上是使用TypeScript和ExpressJS)进行后端项目

我还安装了dot-env软件包,以使用自定义环境变量(来自项目根目录的.env文件)来与TypeORM一起使用。

我已成功访问我的环境变量,一切正常,但如果将TypeORM的类型动态设置为'mysql',则会返回以下错误:

  

期望的类型来自属性“ type”,该属性在此处的“ ConnectionOptions”类型上声明。

我也遇到了类似的问题,尤其是使用TypeORM的'logging'选项时,但是我设法通过转换在config.js文件中检索到的.env变量来解决了这些问题。

到目前为止,我为解决TypeORM的'type'选项所做的事情是:

  • 将我的.env变量投射到DatabaseType,但是它仍然返回相同的错误,

  • 将我的.env变量投射为“ any”类型,但随后返回未定义的变量,

我真的不知道发生了什么。即使我硬编码“ mysql”值而不是检索.env值,它仍然会引发错误。以下代码段显示了我的配置和.env内容,图像显示了错误。

# DATABASE (.env file)
DB_TYPE=mysql
DB_HOST=localhost
DB_USERNAME=root
DB_PASSWORD=123456
DB_NAME=taskline
DB_PORT=3306
DB_SYNCHRONIZE=false
DB_LOGGING=true

   

 // config.js file retrieving my .env variables
    import * as env from 'dotenv';
    import { LoggerOptions } from 'typeorm/logger/LoggerOptions';
    env.config();

    const config = {
        "DB_DRIVER": 'mysql',
        "DB_HOST": process.env.DB_HOST,
        "DB_USERNAME": process.env.DB_USERNAME,
        "DB_PASSWORD": process.env.DB_PASSWORD,
        "DB_NAME": process.env.DB_NAME,
        "DB_PORT": parseInt(process.env.DB_PORT) as number,
        "DB_SYNCHRONIZE": Boolean(process.env.DB_SYNCHRONIZE) as boolean,
        "DB_LOGGING": process.env.DB_LOGGING as LoggerOptions
    };

    export { config };

The returned error

我想知道为什么会发生此错误,以及如何解决或绕过它?

1 个答案:

答案 0 :(得分:0)

可以使用any类型覆盖TypeOrm驱动程序连接选项,如下所示。

const DB_DRIVER: any = process.env.DB_DRIVER || 'mysql';

const config = {
    "DB_DRIVER": DB_DRIVER,
    "DB_HOST": process.env.DB_HOST,
    "DB_USERNAME": process.env.DB_USERNAME,
    "DB_PASSWORD": process.env.DB_PASSWORD,
    "DB_NAME": process.env.DB_NAME,
    "DB_PORT": parseInt(process.env.DB_PORT) as number,
    "DB_SYNCHRONIZE": Boolean(process.env.DB_SYNCHRONIZE) as boolean,
    "DB_LOGGING": process.env.DB_LOGGING as LoggerOptions
};