javascript - 在 TypeScript 中命名抽象类和接口(interface)

标签 javascript node.js oop typescript naming-conventions

<分区>

这个问题存在争议,没有一致性,所以我想澄清一下typescript的类、文件名、后缀等命名标准。 我想知道,在您的 Typescript 项目中,您如何命名抽象类、接口(interface)以及逻辑组织代码?

可能的解决方案:

对于接口(interface):

  • 以“我”为前缀
  • 以“接口(interface)”为后缀
  • 什么都不加

对于抽象类:

  • 以“摘要”为前缀
  • 像“Base”这样的前缀
  • 一无所有

C# 示例

public class User : AbstractUser, IUser

Java 和 PHP 相同

public class User extends AbstractUser implements UserInterface

在 typescript 中

export class User extends AbstractUser implements UserInterface

这是基于 C#、Java 和现代 PHP7+ 等语言的框架中使用的常规方法


Microsoft 建议添加“Interface”作为后缀,这对我来说是正确的。 https://github.com/Microsoft/TypeScript-Handbook/blob/master/pages/Interfaces.md#class-types

另一个流行的风格指南建议不要为接口(interface)的前缀添加任何后缀,对我来说违反规则、可读性和整体看起来不对。 https://basarat.gitbooks.io/typescript/content/docs/styleguide/styleguide.html#interface

export class User extends AbstractUser implements User

最佳答案

我认为这是一个品味问题。

我会使用接口(interface)名称 User 而不是 IUserUserInterface if 可以描述用户对象通过纯 JSON,因此是一个没有类行为的纯数据对象。因为您可能永远不需要实现类,所以您始终可以使用对象字面量:

interface User {
    name: string;
    email: string;
}

function createDummyUser(): User {
    return {
        name : "Alice",
        email: "a@wonder.land"
    }
}

我会使用对象抽象类的普通名称(如“汽车”),并为非抽象类使用特定名称(如“甲壳虫”)。您可以通过使构造函数 protected 来确保您的抽象实现不会被错误使用:

class Car {
    protected constructor() {
    }
}

const fail = new Car();  // error because c'tor is protected

class Beetle extends Car {
       public constructor(){
           super();
       }
}

let itBe = new Beetle();  // here we go!

关于javascript - 在 TypeScript 中命名抽象类和接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41926269/

相关文章:

Javascript 类名不出现

javascript - 如何修复 csv 到 json 转换器模块?

c# - C++ 虚拟方法未按预期调用

php - 类方法的正确 DocBlock 注释,实现了工厂设计模式

javascript - 正则表达式匹配大部分字母数字路径

javascript - 如何在保持居中的同时水平滚动到容器中的项目?

javascript - 如何修复 "Can' t 查找变量 : item"

javascript - 带偏移量的 javascript 数组的 Node 缓冲区

node.js - 继承一对一关系

python - 在类中包装一个函数