如果我有一个实例函数,它检查一个属性是否为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)
答案 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
}