如何判断打字稿,该过程未定义?

Jat*_*att 3 javascript node.js typescript ecmascript-6

在以下代码行中:

internalWhiteList = process.env.INTERNAL_IP_WHITELIST.split( ',' )
Run Code Online (Sandbox Code Playgroud)

我收到一个错误说,Object is possibly undefined.使用名为dotenv的模块从位于根目录的文件env中加载变量.process.env.env

我怎么能告诉打字稿,这process不是未定义的?这是我的tsconfig.json:

    {
    "compilerOptions": {
        "target": "esnext",
        "outDir": "../dist",
        "allowJs": true,
        "module": "commonjs",
        "noEmitOnError": false,
        "noImplicitAny": false,
        "strictNullChecks": true,
        "sourceMap": true,
        "pretty": false,
        "removeComments": true,
        "listFiles": false,
        "listEmittedFiles": false
    },
    "exclude": [
        "node_modules",
        "test/",
        "**/*.spec.ts"
    ]
}
Run Code Online (Sandbox Code Playgroud)

Pal*_*leo 10

也许使用非null断言operator(!):

internalWhiteList = process.env.INTERNAL_IP_WHITELIST!.split( ',' )
Run Code Online (Sandbox Code Playgroud)

或者if声明:

if (process.env.INTERNAL_IP_WHITELIST)
  internalWhiteList = process.env.INTERNAL_IP_WHITELIST.split( ',' )
Run Code Online (Sandbox Code Playgroud)

这是什么意思???

如果您查看Node的type-defs,您会看到:

export interface ProcessEnv {
    [key: string]: string | undefined;
}
Run Code Online (Sandbox Code Playgroud)

string | undefined意味着INTERNAL_IP_WHITELIST可能是未定义的,在这种情况下undefined.split()是一个错误,所以你需要断言或防止它被定义(如这个答案所示).