[Typescript] Private field presents check
JS private field #serialNumber
cannot be accessed outside class. But within class, it is accessible.
JS private field can also be used to check class instance equality.
class Car {
#serialNumber = Math.floor(Math.random() * 100)
// check the given instance is the current one
equals(otherCar: any) {
if (otherCar && typeof otherCar === 'object' && #serialNumber in otherCar) {
// otherCar // Car type
// #serialNumber is accessable inside Car class
// but it is not accessable outside Car class, for example
// const c1 = new Car()
// c1.#serailNumber // Error: private filed is not accessible outside class
return this.#serialNumber === otherCar.#serialNumber
}
return false
}
}
const c1 = new Car()
const c2 = c1
console.log(c1.equals(c2)) // true
const c3 = new Car()
console.log(c3.equals(c1)) // false
Using #serialNumber in otherCar
, we can check to make sure the given instance is actually the same instance we are checking against.
Part of understanding what’s happening here is remembering the rules about JS private #fields
and #methods
. It may be true that another class has a private #serialNumber
field, but instances of Car
would not be able to read it. Thus, if #serialNumber in otherCar
evaluates to true
, otherCar
must be an instance ofCar
. This is why we see the type of otherCar
change from any
to Car
after this check is performed.
You can also use private filed present check to check whether the instance is come out from constructor.
class Car {
#serialNumber = Math.floor(Math.random() * 100)
static isCar(car: any) {
if (car && typeof car === 'object' && #serialNumber in car) {
return true
}
return false
}
}
// Usage
if (Car.isCar(val)) {
val //Car type
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2023-01-16 [Typescript] Be Specific for Better Inference
2020-01-16 [NGXS] Select - 3. @Selector orders matter
2020-01-16 [NGXS] Selector - 2 Joining Selectors, compose
2020-01-16 [NGXS] Select - 1
2020-01-16 [NGXS] Using Immer with NGXS
2020-01-16 [Typescript] Namespaces
2020-01-16 [Algorithm] 14. Longest Common Prefix -- 4