在实例函数中检查null得到" Object可能为null"错误

时间:2018-03-03 15:45:58

标签: typescript

如果我有一个实例函数,它检查一个属性是否为null,TypeScript会给出一个错误' Object可能为null'如果我在条件中使用该函数。但是,如果我直接检查null,则不会发生错误。我该如何解决这个问题?

type SomeType = {
     someFunc: Function;
}

class A {
    bar: SomeType | null;
    constructor() {
      this.bar = null;
    }
    hasBar() {
      return this.bar !== null;
    }

}

const a = new A();

if (a.hasBar()) {
    a.bar.someFunc(); // Throws object possibly null error
}

if (a.bar !== null) {
    a.bar.someFunc(); // Throws no error
}

链接到打字稿操场:Here(在选项中打开strictNullChecks)

1 个答案:

答案 0 :(得分:0)

这是流量分析的已知限制。检查内部函数不会在函数外部产生影响。有关详细信息,请参阅此issue

唯一可以对流量分析产生影响的功能类型是类型保护:

function hasValue<T>(v: T| null): v is T {
    return v !== null;
}
const a = new A();

if (hasValue(a.bar)) {
    a.bar.someFunc(); // a.bar is not null
}