为什么命名interface时不推荐添加I前缀?

本文探讨了在TypeScript中不建议使用'I'作为接口命名前缀的原因。首先,这违反了封装原则,因为类和接口可以相互继承,若类型改变,依赖于名称的代码需更改。其次,避免依赖简单的标识符来命名,鼓励程序员为接口提供有意义的名称。最后,随着匈牙利命名法的过时,更倾向于使用更具语义的变量名。良好的命名有助于提高代码的可读性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多最佳实践和 ts interface的命名规范中都强调过这样一句话:

Do not use “I” as a prefix for interface names

起初很困惑,I前缀能让他人立即分辨出这个类型是否是一个接口,为何要禁止使用?后来渐渐有了答案,特此记录:

原因一:I前缀违反了封装原则

在TS中,类可以实现接口,接口可以继承接口,接口可以继承类。类和接口都是某种意义上的抽象和封装,继承时不需要关心它是一个接口还是一个类。

如果用I前缀,当一个变量的类型更改了,比如由接口变成了类,那变量名称就必须要更改,那代码中依赖变量的地方都要更改。

原因二:防止不恰当的命名

曾经有人调侃说 “在计算机科学中只有两件困难的事:缓存失效和给事物命名”。很多程序员都不愿花功夫去想恰当的命名。禁止使用I前缀可以迫使程序员为接口取一个合适的、带有语义、便于和其他同类型变量区分的名字,而不仅是用前缀区分。

原因三:匈牙利命名的时代已经过去了

匈牙利命名法(Hungarian_notation)由类型前缀加实际的变量名组成,用这种方法命名的变量,看到变量名,可以立即知道其类型。但它的缺点远大于它带来的好处,比如使变量名变得冗长,使相同主体名但类型不同的变量有歧义,比如sWidth、nWidth、fWidth,更好的写法应该是string input、int width、float zoomedWidth

参考:https://stackoverflow.com/questions/31876947/confused-about-the-interface-and-class-coding-guidelines-for-typescript

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值