typescript的class,如何断言一个属性肯定存在?

如下,已经统一写了个函数判断属性是否存在,不存在会抛出错误,但是ts不认,请问有什么方法可以解决这个问题?

class {
 prop1?: sring
 clear() {
     this._check()
     this.prop1.split('') // 这里会提示this.prop1可能不存在
 }
 _check() {
     if (!this.prop1) {
        throw new Error('请先传入正确的参数')
     }
 }
}
阅读 10.1k
2 个回答

非空断言 this.prop1!.split('')
应该没错

似乎没什么好的处理方法,类型保护需要一个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;
  }
}

这种情况楼上提的直接断言应该是最简单有效的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏