|
1 |
| -这个编码规范是给开发TypeScript团队开发TypeScript时使用的。对于我们使用TypeScript的用户来说不一定适用,仅做参考吧。 |
| 1 | +<!-- markdownlint-disable MD005 --> |
| 2 | +<!-- markdownlint-disable MD029 --> |
| 3 | + |
| 4 | +这个编码规范是给TypeScript开发团队在开发TypeScript时使用的。 |
| 5 | +对于使用TypeScript的普通用户来说不一定适用,但是可以做为一个参考。 |
2 | 6 |
|
3 | 7 | ## 命名
|
| 8 | + |
4 | 9 | 1. 使用PascalCase为类型命名。
|
5 |
| -1. 不要使用`I`做为接口名前缀。 |
6 |
| -1. 使用PascalCase为枚举值命名。 |
7 |
| -1. 使用camelCase为函数命名。 |
8 |
| -1. 使用camelCase为属性或本地变量命名。 |
9 |
| -1. 不要为私有属性名添加`_`前缀。 |
10 |
| -1. 尽可能使用完整的单词拼写命名。 |
11 |
| - |
12 |
| -## 组件 |
| 10 | +2. 不要使用`I`做为接口名前缀。 |
| 11 | +3. 使用PascalCase为枚举值命名。 |
| 12 | +4. 使用camelCase为函数命名。 |
| 13 | +5. 使用camelCase为属性或本地变量命名。 |
| 14 | +6. 不要为私有属性名添加`_`前缀。 |
| 15 | +7. 尽可能使用完整的单词拼写命名。 |
| 16 | + |
| 17 | +## 组件 |
| 18 | + |
13 | 19 | 1. 1个文件对应一个逻辑组件 (比如:解析器,检查器)。
|
14 |
| -1. 不要添加新的文件。 :) |
15 |
| -1. `.generated.*`后缀的文件是自动生成的,不要手动改它。 |
| 20 | +2. 不要添加新的文件。 :) |
| 21 | +3. `.generated.*`后缀的文件是自动生成的,不要手动改它。 |
16 | 22 |
|
17 | 23 | ## 类型
|
| 24 | + |
18 | 25 | 1. 不要导出类型/函数,除非你要在不同的组件中共享它。
|
19 |
| -1. 不要在全局命名空间内定义类型/值。 |
20 |
| -1. 共享的类型应该在`types.ts`里定义。 |
21 |
| -1. 在一个文件里,类型定义应该出现在顶部。 |
| 26 | +2. 不要在全局命名空间内定义类型/值。 |
| 27 | +3. 共享的类型应该在`types.ts`里定义。 |
| 28 | +4. 在一个文件里,类型定义应该出现在顶部。 |
| 29 | + |
| 30 | +## `null` 和 `undefined`: |
22 | 31 |
|
23 |
| -## `null` 和 `undefined`: |
24 | 32 | 1. 使用 **undefined**,不要使用 null。
|
25 | 33 |
|
26 | 34 | ## 一般假设
|
| 35 | + |
27 | 36 | 1. 假设像Nodes,Symbols等这样的对象在定义它的组件外部是不可改变的。不要去改变它们。
|
28 |
| -1. 假设数组是不能改变的。 |
| 37 | +2. 假设数组是不能改变的。 |
29 | 38 |
|
30 | 39 | ## 类
|
| 40 | + |
31 | 41 | 1. 为了保持一致,在核心编译链中不要使用类,使用函数闭包代替。
|
32 |
| - |
| 42 | + |
33 | 43 | ## 标记
|
| 44 | + |
34 | 45 | 1. 一个类型中有超过2个布尔属性时,把它变成一个标记。
|
35 | 46 |
|
36 | 47 | ## 注释
|
| 48 | + |
37 | 49 | 为函数,接口,枚举类型和类使用JSDoc风格的注释。
|
38 | 50 |
|
39 | 51 | ## 字符串
|
| 52 | + |
40 | 53 | 1. 使用双引号`""`
|
41 |
| -1. 所有要展示给用户看的信息字符串都要做好本地化工作(在diagnosticMessages.json中创建新的实体)。 |
| 54 | +2. 所有要展示给用户看的信息字符串都要做好本地化工作(在diagnosticMessages.json中创建新的实体)。 |
42 | 55 |
|
43 | 56 | ## 错误提示信息
|
| 57 | + |
44 | 58 | 1. 在句子结尾使用`.`。
|
45 |
| -1. 对不确定的实体使用不定冠词。 |
46 |
| -1. 确切的实体应该使用名字(变量名,类型名等) |
47 |
| -1. 当创建一条新的规则时,主题应该使用单数形式(比如:An external module cannot...而不是External modules cannot)。 |
48 |
| -1. 使用现在时态。 |
| 59 | +2. 对不确定的实体使用不定冠词。 |
| 60 | +3. 确切的实体应该使用名字(变量名,类型名等) |
| 61 | +4. 当创建一条新的规则时,主题应该使用单数形式(比如:An external module cannot...而不是External modules cannot)。 |
| 62 | +5. 使用现在时态。 |
49 | 63 |
|
50 | 64 | ## 错误提示信息代码
|
| 65 | + |
51 | 66 | 提示信息被划分类成了一般的区间。如果要新加一个提示信息,在上条代码上加1做为新的代码。
|
| 67 | + |
52 | 68 | * 1000 语法信息
|
53 | 69 | * 2000 语言信息
|
54 | 70 | * 4000 声明生成信息
|
|
59 | 75 | ## 普通方法
|
60 | 76 |
|
61 | 77 | 由于种种原因,我们避免使用一些方法,而使用我们自己定义的。
|
| 78 | + |
62 | 79 | 1. 不使用ECMAScript 5函数;而是使用[core.ts](https://github.com/Microsoft/TypeScript/blob/master/src/compiler/core.ts)这里的。
|
63 |
| -1. 不要使用`for..in`语句;而是使用`ts.forEach`,`ts.forEachKey`和`ts.forEachValue`。注意它们之间的区别。 |
64 |
| -1. 如果可能的话,尝试使用`ts.forEach`,`ts.map`和`ts.filter`代替循环。 |
| 80 | +2. 不要使用`for..in`语句;而是使用`ts.forEach`,`ts.forEachKey`和`ts.forEachValue`。注意它们之间的区别。 |
| 81 | +3. 如果可能的话,尝试使用`ts.forEach`,`ts.map`和`ts.filter`代替循环。 |
65 | 82 |
|
66 | 83 | ## 风格
|
67 | 84 |
|
68 | 85 | 1. 使用arrow函数代替匿名函数表达式。
|
69 |
| -1. 只要需要的时候才把arrow函数的参数括起来。<br />比如,`(x) => x + x`是错误的,下面是正确的做法: |
| 86 | +2. 只要需要的时候才把arrow函数的参数括起来。<br />比如,`(x) => x + x`是错误的,下面是正确的做法: |
| 87 | + |
70 | 88 | 1. `x => x + x`
|
71 | 89 | 2. `(x,y) => x + y`
|
72 | 90 | 3. `<T>(x: T, y: T) => x === y`
|
73 |
| -1. 总是使用`{}`把循环体和条件语句括起来。 |
| 91 | + |
| 92 | +3. 总是使用`{}`把循环体和条件语句括起来。 |
74 | 93 | 4. 开始的`{`总是在同一行。
|
75 | 94 | 5. 小括号里开始不要有空白. <br />逗号,冒号,分号后要有一个空格。比如:
|
| 95 | + |
76 | 96 | 1. `for (var i = 0, n = str.length; i < 10; i++) { }`
|
77 | 97 | 2. `if (x < 10) { }`
|
78 | 98 | 3. `function f(x: number, y: string): void { }`
|
| 99 | + |
79 | 100 | 6. 每个变量声明语句只声明一个变量 <br />(比如 使用 `var x = 1; var y = 2;` 而不是 `var x = 1, y = 2;`)。
|
80 | 101 | 7. `else`要在结束的`}`后另起一行。
|
0 commit comments