如下,已经统一写了个函数判断属性是否存在,不存在会抛出错误,但是ts不认,请问有什么方法可以解决这个问题?
class {
prop1?: sring
clear() {
this._check()
this.prop1.split('') // 这里会提示this.prop1可能不存在
}
_check() {
if (!this.prop1) {
throw new Error('请先传入正确的参数')
}
}
}
如下,已经统一写了个函数判断属性是否存在,不存在会抛出错误,但是ts不认,请问有什么方法可以解决这个问题?
class {
prop1?: sring
clear() {
this._check()
this.prop1.split('') // 这里会提示this.prop1可能不存在
}
_check() {
if (!this.prop1) {
throw new Error('请先传入正确的参数')
}
}
}
似乎没什么好的处理方法,类型保护需要一个if
type RequiredProps<T, K extends keyof T> = Exclude<T, K> & Required<Pick<T, K>>;
class Foo {
prop1?: string;
clear() {
if (this._check()) {
this.prop1.split("");
}
}
_check(): this is RequiredProps<Foo, "prop1"> {
if (!this.prop1) {
throw new Error("请先传入正确的参数");
}
return true;
}
}
这种情况楼上提的直接断言应该是最简单有效的
非空断言
this.prop1!.split('')
应该没错