我有下面的一段代码,它通过dotenv拉环境变量,如果它不存在,可以替换它,如果defaultValue
被传递,或者如果它们都不包含值,就会抛出错误。这会造成执行崩溃或返回有效值的情况。
const getEnvironmentVariable = (
variable: string,
defaultValue?: string|number,
): string | number => {
if((process.env[variable] === undefined) && defaultValue === undefined){
// eslint-disable-next-line max-len
throw new Error(`Mandatory environment variable ${variable} was not set.`)
}
if(
process.env[variable] === undefined
&& defaultValue !== undefined
) {
// eslint-disable-next-line no-console, max-len
console.info(`Environment variable ${variable} was not set. Using default: ${defaultValue}`)
}
return process.env[variable] ?? defaultValue
}
但是我在返回时得到以下错误,即使它永远不会发生,也会返回undefined。
类型'字符串|undefined "不能赋值给类型“字符串|类型'undefined'不能赋给类型'string|编号“。
2条答案
按热度按时间0sgqnhkj1#
typescript 不理解的概念:如果此变量未定义,则意味着另一个变量未定义。
对于Typescript,这只是意味着这两个变量都可以不定义。
您可能会遇到的另一个问题是,即使您在上一行签入,
process.env[variable]
也总是返回string | undefined
。因此,您应该将其存储在const
中。下面是一个应该有效的示例:8iwquhpp2#
在第一个
if
之后,defaultValue
仍然是string | number | undefined
,因为and
。由于
process.env[variable] === undefined
可能为假,因此不检查第二个操作数。对于第二个
if
也是如此,为了检查defaultValue === undefined
,必须拆分if
: