使用TS

时间:2018-06-23 23:20:27

标签: node.js typescript typescript2.0 tsc

我有几个类似的记录语句:

log.info('docker.r2g run routine is waiting for exit signal from the user. The container id is:', chalk.bold(process.env.r2g_container_id));
log.info('to inspect the container, use:', chalk.bold(`docker exec -it ${process.env.r2g_container_id} /bin/bash`));
log.info('to stop/kill the container, use kill, not stop:', chalk.bold(`docker kill ${process.env.r2g_container_id}`));

当我使用tsc进行翻译时,出现以下错误:

src/commands/run/run.ts(132,94): error TS2339: Property 'r2g_container_id' does not exist on type 'ProcessEnv'.

133 log.info('to stop/kill the container, use kill, not stop:', chalk.bold(`docker kill ${process.env.r2g_container_id}`));

process.env强制转换为any或其他方法以摆脱这些错误的最佳方法是什么?或者,也许我可以扩展ProcessEnv以包括我要查找的env变量?不过前者看起来还不错。

我尝试过:

declare global {

  namespace NodeJS {
    export interface ProcessEnv {
      r2g_container_id: string,
      docker_r2g_is_debug: string
    }
  }

}

但这不是很正确。

这是我们可能要回答的类似问题:using process.env in TypeScript

3 个答案:

答案 0 :(得分:1)

(<any>process.env).r2g_container_id

这应该足以强制转换为键入any

答案 1 :(得分:1)

这似乎可行:

declare global {

  namespace NodeJS {

    export interface ProcessEnv  {
      [key:string]: string,
      r2g_container_id: string,
      docker_r2g_is_debug: string,
      docker_r2g_fs_map: string
      HOME: string
    }

  }

}

我不确定这是扩大还是覆盖了现有的定义,但是无论如何编译错误都消失了。

答案 2 :(得分:1)

这似乎也可行:

declare namespace NodeJS {
  export interface EnvironmentVariables {
    r2g_container_id: string,
    docker_r2g_is_debug: string
  }
}

在这里找到: https://github.com/typings/registry/issues/770