TypeScript里应该尽量用#代替private

TS类编译之后就会变成普通的JS类,private和protected在编译之后都会变成和public一样
访问控制只会在编译时检查
所以扩展一个类时,不能和这个类的任何private成员重名

class A {
    private test = 2;
}
class B extends A {
    private test = 1;
}
class C extends A {
    protected test = 1;
}
class D extends A {
    public test = 1;
}

编译器报错

Class ‘B’ incorrectly extends base class ‘A’.
Types have separate declarations of a private property ‘test’.

Class ‘C’ incorrectly extends base class ‘A’.
Property ‘test’ is private in type ‘A’ but not in type ‘C’.

Class ‘D’ incorrectly extends base class ‘A’.
Property ‘test’ is private in type ‘A’ but not in type ‘C’.

那么应该如何解决,很遗憾,在ES6之前是没办法的

如果TS要编译成ES6+
可以这样

class A {
    #test = 2;
}
class B extends A {
    #test = 1;
}
class C extends A {
    public test = 1;
}

#是ES6+的private
在JS里派生类的私有成员可以和基类重名,到了TS里当然也就可以

这里要注意了
#本身也是成员名的一部分,所以这样会是两个不同的成员

class Test {
    #test = 1
    test = 2
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值