命名
- 使用 PascalCase 为类型、枚举类型命名
- 使用 UPPER_CASE 为常量和枚举值命名
- 使用 camelCase 为函数命名
- 使用 camelCase 为属性或本地变量命名
- 不要为私有属性名添加
_
前缀,如果某些属性你不想任何人访问它,可以添加$
前缀 - 尽可能使用完整的单词拼写命名
- 函数名采用
动词
或动词+名词
的方式
start()
startLevel(level: number)
- 使用有意义的变量命名
- 正确示范
clickCallback
tempValue
- 错误示范
func
a
b
类型
- 不要使用 namespace 使用 ES Module
- 不要导出类型/函数,除非你要在不同的组件中共享它
- 在一个文件里,类型定义应该出现在顶部
- 尽量使用
**undefined**
,而不是null
组件
- 1个文件对应一个逻辑组件 (比如:资源类型,资源加载器)
gen
目录下的文件是自动生成的,不要手动改它。
一般假设
- 假设外部不需要修改的成员,需要添加
readonly
修饰 - 假设外部不需要访问的成员,应添加
private
或protected
修饰 - 假设不会变的对象,应声明为
Readonly<T>
注释
- 为类、成员、函数,接口,枚举类型等使用 JSDoc风格的注释
- 不要在文件头添加签名
字符串
- 使用单引号
'我是字符串'
- 使用模板拼接字符串而不是
+
运算符
普通方法
- 不要使用
for..in
语句;而是使用for...of
,forEach
, 注意它们之间的区别。 - 如果可能的话,使用
forEach
,map
和filter
代替循环。 - 成员函数不要写成箭头函数,这会影响多态调用。
风格
- 使用
Tab
缩进而不是空格。 - 使用箭头函数代替匿名函数表达式。
只有需要的时候才把箭头函数的参数括起来。比如,
(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;
- 正确示范