用更合理的方式书写 Typescript
- 规范的代码可以促进团队合作,
- 规范的代码可以减少
bug
处理, - 规范的代码可以降低维护成本,
- 规范的代码有助于代码审查,
- 养成代码规范的习惯,有助于程序员自身的成长。
命名
- 使用PascalCase为类型命名。
- 不要使用
I
做为接口名前缀。 - 使用PascalCase为枚举值命名。
- 使用camelCase为函数命名。
- 使用camelCase为属性或本地变量命名。
- 不要为私有属性名添加
_
前缀。 - 尽可能使用完整的单词拼写命名。
组件
- 1个文件对应一个逻辑组件 (比如:解析器,检查器)。
- 不要添加新的文件。
.generated.*
后缀的文件是自动生成的,不要手动改它。
类型
- 不要导出类型/函数,除非你要在不同的组件中共享它。
- 不要在全局命名空间内定义类型/值。
- 共享的类型应该在
types.ts
里定义。 - 在一个文件里,类型定义应该出现在顶部。
null
和 undefined
:
- 使用 undefined,不要使用 null。
一般假设
- 假设像Nodes,Symbols等这样的对象在定义它的组件外部是不可改变的。不要去改变它们。
- 假设数组是不能改变的。
类
- 为了保持一致,在核心编译链中不要使用类,使用函数闭包代替。
标记
- 一个类型中有超过2个布尔属性时,把它变成一个标记。
注释
为函数,接口,枚举类型和类使用JSDoc风格的注释。
字符串
- 使用双引号
""
- 所有要展示给用户看的信息字符串都要做好本地化工作(在diagnosticMessages.json中创建新的实体)。
错误提示信息
- 在句子结尾使用
.
。 - 对不确定的实体使用不定冠词。
- 确切的实体应该使用名字(变量名,类型名等)
- 当创建一条新的规则时,主题应该使用单数形式(比如:An external module cannot...而不是External modules cannot)。
- 使用现在时态。
错误提示信息代码
提示信息被划分类成了一般的区间。如果要新加一个提示信息,在上条代码上加1做为新的代码。
- 1000 语法信息
- 2000 语言信息
- 4000 声明生成信息
- 5000 编译器选项信息
- 6000 命令行编译器信息
- 7000 noImplicitAny信息
普通方法
由于种种原因,我们避免使用一些方法,而使用我们自己定义的。
- 不使用ECMAScript 5函数;而是使用core.ts这里的。
- 不要使用
for..in
语句;而是使用ts.forEach
,ts.forEachKey
和ts.forEachValue
。注意它们之间的区别。 - 如果可能的话,尝试使用
ts.forEach
,ts.map
和ts.filter
代替循环。
风格
- 使用arrow函数代替匿名函数表达式。
- 只要需要的时候才把arrow函数的参数括起来。
比如,
(x) => x x
是错误的,下面是正确的做法: x => x x
(x,y) => x y
<T>(x: T, y: T) => x === y
- 总是使用
{}
把循环体和条件语句括起来。 - 开始的
{
总是在同一行。 - 小括号里开始不要有空白. 逗号,冒号,分号后要有一个空格。比如:
for (var i = 0, n = str.length; i < 10; i ) { }
if (x < 10) { }
function f(x: number, y: string): void { }
- 每个变量声明语句只声明一个变量
(比如 使用
var x = 1; var y = 2;
而不是var x = 1, y = 2;
)。 else
要在结束的}
后另起一行。