命名

1. 使用 PascalCase 为类型、枚举类型命名
2. 使用 UPPER_CASE 为常量和枚举值命名
3. 使用 camelCase 为函数命名
4. 使用 camelCase 为属性或本地变量命名
5. 不要为私有属性名添加_前缀,如果某些属性你不想任何人访问它,可以添加$前缀
6. 尽可能使用完整的单词拼写命名
7. 函数名采用 动词动词+名词 的方式

- start()
- startLevel(level: number)

1. 使用有意义的变量命名

- 正确示范clickCallback tempValue
- 错误示范 func a b

类型

1. 不要使用 namespace 使用 ES Module
2. 不要导出类型/函数,除非你要在不同的组件中共享它
3. 在一个文件里,类型定义应该出现在顶部
4. 尽量使用 undefined,而不是 null

组件

- 1个文件对应一个逻辑组件 (比如:资源类型,资源加载器)
- gen目录下的文件是自动生成的,不要手动改它。

一般假设

1. 假设外部不需要修改的成员,需要添加 readonly 修饰
2. 假设外部不需要访问的成员,应添加 privateprotected 修饰
3. 假设不会变的对象,应声明为Readonly

注释

1. 为类、成员、函数,接口,枚举类型等使用 JSDoc风格的注释
2. 不要在文件头添加签名

字符串

1. 使用单引号'我是字符串'
2. 使用模板拼接字符串而不是 + 运算符

普通方法

- 不要使用for..in语句;而是使用for...of, forEach, 注意它们之间的区别。
- 如果可能的话,使用forEachmapfilter代替循环。
- 成员函数不要写成箭头函数,这会影响多态调用。

风格

1. 使用 Tab 缩进而不是空格。

2. 使用箭头函数代替匿名函数表达式。

3. 只有需要的时候才把箭头函数的参数括起来。比如,

(x) => x + x

是错误的,正确的做法是

1. x => x + x
2. (x, y) => x + y
3. (x: T, y: T) => x === y

4. 开始的{总是和其所属的语句在同一行

5. 小括号里开始不要有空白

6. 逗号,冒号,分号后要有一个空格。比如:

1. for (var i = 0, n = str.length; i < 10; i++) { }
2. if (x < 10) { }
3. function f(x: number, y: string): void { }

7. 每个变量声明语句只声明一个变量

1. 正确示范 var x = 1; var y = 2;
2. 错误示范 var x = 1, y = 2;