首页 > 解决方案 > 使用 process.exit 进行 TypeScript 推理

问题描述

通常,TypeScript 可以在警卫的帮助下推断变量的类型,然后返回:

type Pet = Dog | Cat;
function isDog(pet: Pet): pet is Dog {
  return true;
}

function fn1(pet: Pet) {
  if (isDog(pet)) {
    return;
  }

  // At this point, TS knows that `pet` is a `Cat`.
}

但是,如果我将 return 更改为process.exit,这将不再起作用:

function fn2(pet: Pet) {
  if (isDog(pet)) {
    process.exit(1);
  }

  // At this point, we know that `pet` should be a `Cat`, but TS doesn't know.
}

process.exit有没有办法让我以类似的方式向编译器发出程序将在之后结束的信号return

当然,我可以在process.exit. 但是,在我的实际代码中,我的函数正在返回一些东西,调用它,因此当是 aMyObject时没有合理的值,因此强制退出。petDog

我知道我可以做一些类型断言来解决这个问题,但想知道什么是解决这个问题的好方法。

标签: typescript

解决方案


我相信这是 Typescript 的限制(即使是最新版本)。

解决方法:

你可以return process.exit(1)

type Pet = Dog | Cat

function isDog(pet: Pet): pet is Dog {
    return true
}

function fn1(pet: Pet) {
    if (isDog(pet)) {
        return process.exit(1)
    }

    return console.log(pet)
}

Typescript 推断petCat.

代码截图


推荐阅读