【TypeScript】也许是一个不好的类型声明习惯
TypeScript 的代码在实际生产中没有任何作用,作为一种辅助代码嵌入在开发环境中,为了区分代码,TypeScript 的类型声明一般采用首字母大写的形式,比如:
interface User: string;
const user: User = "Tom";
上面命名类型的规则在绝大多数的时候都是合适的,但是遇到类的时候就麻烦了,因为 JS 约定俗成类的名字首字母就是大,比如:
class User {}
这种情况下就和类型声明的规则冲突了,为了解决这个问题,大家一般会在类型的前面再加一个前缀大写的—— I
。
interface IUser {}
作为一个最佳实践,甚至放进了 lint 工具中,比如 TSLint 的 Rule: interface-name 和 typescript-eslint 的 Enforce that interface names do not begin with an I
之前我也是遵守这个实践的,只是觉得有点丑。
这个命名的写法很明显不是 JS 语言的,因为 JS 里面没有接口这个概念,所以这个命名的实践是从其他语言借鉴过来的,比如 C# 中:
interface IMyInterface
{
// 定义一个方法
void DoSomething();
// 定义一个属性
int MyProperty { get; set; }
// 定义一个事件
event EventHandler MyEvent;
}
回到用 TS 的初衷,我们用 TS 是干啥的?用 TS 是定义类型的,所以解决类型和类名的冲突更好的办法应该是下面这样:
interface UserType {}
UserType
看起来比 IUser
更美,而且意思也很简洁明了,事实上现在 TS 很少用到 class,因为类组件的时代已经远去,现在是 hook 的时代,比较多的是使用函数。
除此之外,再使用 type 声明类型的时候还有人采用前缀是大写的 T
,这个就更毫无来由了,就像你不会在声明 string 或者 object 给类型变量加上 s
或者 o
一样,减少这种前缀命名法。
interface TUser {}
参考:
转载自:https://juejin.cn/post/7241014307710156861