[Typescript] Private field presents check

JS private field #serialNumbercannot 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 #fieldsand #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 otherCarevaluates to true, otherCar must be an instance ofCar. This is why we see the type of otherCar change from anyto 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
}

 

posted @   Zhentiw  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源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
点击右上角即可分享
微信分享提示