检查字符串是否包含在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不太好。