TypeScript编码规范

目的与声明

我们的目的是通过统一专业术语、统一规格标准的方式来提高团队整体协作的效率。

我们尊重每个成员的编码习惯,我们只纠正那些容易导致错误的不良习惯。

我们通过技术手段实现统一的编码规范,而非仅仅是口头约定。
我们的编码要求非常宽松,但是对于明显不符合要求的代码将拒绝签入。

编码格式

文件编码

统一使用 UTF-8 无 BOM 格式读写所有代码。

缩进

使用 1 个 TAB(占 4 个空格的宽度)(推荐)、4 个空格或 2 个空格创建缩进。

您在输入缩进时应使用 Tab 键,而不是使用空格键。
您在删除缩进时应使用 Shift+Tab 键,而不是使用退格键。

换行

您应该使用和操作系统相同的换行符。
这意味着您应该在 Windows 上使用 CR(Unicode 13) LF(Unicode 10) 作为换行符,
在 Mac/Linux 上使用 LF(Unicode 10) 作为换行符。

对于生成的代码应该忽略操作系统的区别,始终使用 LF 作为换行符。
在程序中您应该固定使用 '\n' 作为换行符。

空格

我们追加空格,可以让代码看起来不那么紧凑,减少阅读者的视觉压力。

代码中只允许使用空格键 (Unicode 32) 输入空格。

在单目运算符之间不追加空格:

-b
!!b

如果单目运算符是一个单词,则添加一个空格:

new Func
void 0
typeof x

在双目运算符左右追加一个空格:

x + y * 3
a = b + 1;
-x + ++y

在冒号、逗号、分号后追加一个空格(末尾除外):

a = 1, b = 2
var a: number = 1;

在 if、for、while、switch、with 语句的括号前后追加空格:

if (a > 1) {

}
for (var i = 1; i < 2; i++) {

}
do {

} while(a < 1);

在函数声明的签名前后追加空格:

function fn(a, b) {

}

在匿名函数的签名前不追加空格

var fn = function(a, b) {

};

不建议为了对齐某些代码而手动添加空格,如下代码是不建议的:

var hello = 1;
var hi    = 2; // 不建议在此次故意追加空格以保持 = 对齐。
var not   = 3; // 不建议在此次故意追加空格以保持 = 对齐。

但是可以为了对齐注释而添加空格。

var hello = 1;   // 对齐的注释。
var hi = 2;      // 对齐的注释。
var not = 3;     // 对齐的注释。

在每行代码末尾可以出现任意个无用的空格。

在语法要求输入空格的地方只能输入一个空格。

新行

我们建议在每个代码段、每个成员声明之间追加一个空行。

import * as path from "path";

function fn1() {

}

function fn2() {

}

class A {

    fn1() {

    }

    fn2() {

    }

}

建议将 else、catch、finally 等子段写在一行:

if (a > 1) {

} else if (b > 1) {

} else {

}

try {

} catch(e) {

} finally {

}

我们允许将空且永久为空的 {} 写在一行如:

var obj = {};
function empty() {}

如果 {}[] 内包含多个复杂的项,应分多行书写。

var a = {
    b: 1,
    c: 2,
    d: [],
    e: [1, 2, 3],
    f: [
        "aaa",
        "bbb",
        "ccc",
        "ddd",
        "eee"
    ]
};

我们建议在代码长度超过 120 时换行。
换行的位置应该是某个操作符末尾。

var a = "I'm a long long long " + // 将 + 放在末尾。
    "long long long text";

同一行代码换行后,新行增加一个缩进。

逗号

我们建议为{} 中的每个键值对末尾添加逗号。
如果这个对象未来可扩展,在最后一个键值对也应追加逗号。

var obj = {
    a: 1,
    b: 2, // 保留此逗号
};

enum A {
    a = 1,
    b = 2,
}

括号

不要为明确优先级的操作符添加括号。
如以下代码是不建议的:

a + (4 * b) // * 先算,不需要括号
typeof x // typeof 和 new 等类似是一个操作符,不需要括号

当判断一个赋值语句时,建议追加括号:

if ((x = 1)) { // 追加括号以表示这里不是将 == 误写成 =

}

立即执行的函数应使用括号:

(function() {

})();

不强制为每个 if、for、while 等语句添加 {}。

注释

所有 API 应使用 Java 风格的文档注释。

在文件顶部使用多行注释插入文件说明、版权声明等内容。

在代码中使用单行注释解释代码的目的。

其它

语句应固定以 } 或 ; 结尾。
一行内最多只能有一行语句。

不建议使用 with 语法。

对于无限循环,应使用 true 作为循环条件。

如果字符串内部是一段 HTML,则应该确保 HTML 使用双引号,外部字符串使用单引号。

允许使用 ?:、&& 和 || 代替 if 语句。

建议使用 `` 字符串书写多行字符串。

建议保持较低闭包嵌套级别。
当闭包嵌套级别超过 5 时,建议您重新整理代码。

不建议使用 [] 获取常量属性。

a["x"]   // 不建议
a.x      // 建议

命令规则

大小写

TypeScript 中命名规则统一为骆驼规则,即除了第一个单词,以后每个单词首字母大写,如 fileName:

function getName(userId) {
    var currentUserEnv = 1;
}

对于类型名应保持首字母大写:

class MyClass {

}
enum Weekday {

}

对于一个类的私有成员,可以追加 _ 前缀。

class User {

    private _name: string;

    getName() {
        return this._name;
    }

}

固定命名

用于保存 this 的变量名固定为 me
用于保存 arguments 的变量名固定为 args
用于循环的变量名固定为 ijk
用于泛型的变量名固定为 TKR

API 命名

原则上,公开 API 和参数不应该随意缩写英语单词。

除非这个缩写在 HTML、CSS、JavaScript 规范里已出现。

对于内部变量,则可以使用简写。

如果一个枚举的各项是可组合的标记位,则枚举类型为复数形式。
如果一个枚举的各项是独立的,则枚举类型名为单数形式。

属性名应主要为定主结构。
方法名应主要为动宾结构。

方法的动词部分采用第三人称形式。

文件命名

文件和文件夹按骆驼规则命名,首字母小写。

如果文件内有且只有一个成员,则文件名应和该成员相同。

你可能感兴趣的:(TypeScript编码规范)