代码是这样的:

class MyClass {
  getValue() {
    // some code here...
  }
}

const IS_ENABLED = process.env.IS_ENABLED || false;
const myClass = IS_ENABLED ? new MyClass() : null;

function getValue() {
  if (!IS_ENABLED) return false;

  return myClass.getValue();
}


现在,TypeScript正在给出错误(对于myClass.getValue()):

Object is possibly 'null'.


但是,由于我已经检查了条件,因此我确定它不为空。

TypeScript有什么方法可以处理它吗?

最佳答案

Typescript将不会跟踪以这种方式相关的变量。有许多模式可以用作类型保护并更改变量的类型。

在这种情况下,由于IS_ENABLEDmyClass密切相关,因此您可以检查myClass是否为undefined

const IS_ENABLED = process.env.IS_ENABLED || false;
const myClass = IS_ENABLED ? new MyClass() : null;

function getValue() {
    if (!myClass) return false;

    return myClass.getValue();
}


或者,您可以使用有区别的联合(如果您有多个myClass类型(例如变量),这可能很有用):

const config = (process.env.IS_ENABLED || false) ? {
    IS_ENABLED: true as const,
    myClass: new MyClass(),
    myClass2: new MyClass()
} : {
    IS_ENABLED: false as const,
}

function getValue() {
    if (!config.IS_ENABLED) return false;
    config.myClass2.getValue();
    return config.myClass.getValue();
}

10-07 22:23