likes
comments
collection
share

【TypeScript】也许是一个不好的类型声明习惯

作者站长头像
站长
· 阅读数 37

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
评论
请登录