检查字符串是否包含在Typescript中的ReadonlyArray中
背景是,我试图从检查字符串是否包含在Typescript中的ReadonlyArray中,typescript,typeorm,Typescript,Typeorm,背景是,我试图从.env中读取数据库类型以构建类型化连接,如下所示: const-config:ConnectionOptions={ 类型:process.env.DB|u CONNECTION,//数据库类型的类型='mysql'|'postgres'|'sqlite'|。。。 //... } 然后,我在上面列出了受支持的DatabaseTypes: const-SUPPORTED_-DB_-TYPES=['mysql','mariadb','postgres']作为const;//此数组
.env
中读取数据库类型
以构建类型化连接,如下所示:
const-config:ConnectionOptions={
类型:process.env.DB|u CONNECTION,//数据库类型的类型='mysql'|'postgres'|'sqlite'|。。。
//...
}
然后,我在上面列出了受支持的DatabaseType
s:
const-SUPPORTED_-DB_-TYPES=['mysql','mariadb','postgres']作为const;//此数组包含选定的数据库类型
当我想缩小类型时,问题就出现了。此功能目前有效,但涉及到以下方面:
const isSupportedDBType=(dbConnection:string | undefined):dbConnection是受支持的类型的类型[number]=>
数据库连接!==未定义&&
((支持的_DB_类型为只读字符串[]).indexOf(dbConnection)>-1);
如果(!isSupported(process.env.DB_CONNECTION)){/*…*/}
如果我将删除为只读字符串[]
,则由于以下错误,我必须强制转换:
“string”的参数类型不能分配给“mysql”|“mariadb”|“postgres”的参数类型
是否有办法将
用作只读字符串[]
?注意进程的类型。env
:
导出接口ProcessEnv{
[键:字符串]:字符串|未定义
}
您的问题是由process.env.DB_连接
引起的,它是string |未定义的
所以当你这样做的时候:
支持的\u DB\u类型.indexOf(process.env.DB\u连接)
您正在搜索字符串
中的'mysql'|'mariadb'|'postgres'
数组
一种解决方案是将DB\u连接
键入为支持的\u DB\u类型[number]
,这是不好的,因为DB\u连接
可能是其他类型。否则,您可以将其转换为any
,这是一个不错的主意
您的解决方案是将
用作只读字符串[]
,这在我看来也不是一个坏主意。因为这个cast的作用域是有限的,而且使用它的原因是indexOf
函数对您的使用来说太严格了。是的,我知道,所以我正在寻找一种解决cast的方法,因为cast不太好。