代码是这样的:
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_ENABLED
和myClass
密切相关,因此您可以检查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();
}