TypeScript中isNetworked方法里的& this在this类型守卫中的作用
FileSystemObject中isNetworked()返回类型里
& this的作用 这个& this的核心作用是在类型守卫生效时,同时保留当前实例的具体类型,并附加Networked接口的类型,避免类型信息丢失。
具体来说:
- Networked是一个独立接口,并非FileSystemObject的子类。如果单纯写
this is Networked,当isNetworked()返回true时,TypeScript会把对象类型直接替换成Networked,这样原本的类实例属性(比如FileRep的content、Directory的children)就会丢失,无法访问。 - 用
Networked & this这种交叉类型,相当于告诉TypeScript:该对象既是调用方法的当前实例类型(比如FileRep或Directory),同时也符合Networked接口的要求。这样在类型守卫生效后,你既能访问Networked定义的host属性,也能正常访问当前实例原本的所有属性和方法。
举个实际使用的例子:
const myFile = new FileRep("/docs/note.md", "TypeScript笔记"); if (myFile.isNetworked()) { // 这里myFile的类型是FileRep & Networked console.log(myFile.content); // 可以访问FileRep的content属性 console.log(myFile.host); // 也可以访问Networked的host属性 }
如果没有& this,这里myFile的类型会被推断为Networked,就无法访问content属性了。
内容的提问来源于stack exchange,提问作者user6167246
相关产品推荐
相关产品推荐

