编码规范

    1. 使用PascalCase为类型命名。
    2. 不要使用I做为接口名前缀。
    3. 使用PascalCase为枚举值命名。
    4. 使用camelCase为函数命名。
    5. 使用camelCase为属性或本地变量命名。
    6. 不要为私有属性名添加_前缀。

    组件

    1. 1个文件对应一个逻辑组件 (比如:解析器,检查器)。
    2. 不要添加新的文件。 :)
    3. .generated.*后缀的文件是自动生成的,不要手动改它。

    类型

    1. 不要导出类型/函数,除非你要在不同的组件中共享它。
    2. 不要在全局命名空间内定义类型/值。
    3. 共享的类型应该在types.ts里定义。
    4. 在一个文件里,类型定义应该出现在顶部。

    nullundefined

    1. 使用 undefined,不要使用 null。
    1. 假设像Nodes,Symbols等这样的对象在定义它的组件外部是不可改变的。不要去改变它们。
    2. 假设数组是不能改变的。

    1. 为了保持一致,在核心编译链中不要使用类,使用函数闭包代替。

    标记

    1. 一个类型中有超过2个布尔属性时,把它变成一个标记。

    注释

    1. 使用双引号""
    2. 所有要展示给用户看的信息字符串都要做好本地化工作(在diagnosticMessages.json中创建新的实体)。

    错误提示信息

    1. 在句子结尾使用.
    2. 对不确定的实体使用不定冠词。
    3. 确切的实体应该使用名字(变量名,类型名等)
    4. 当创建一条新的规则时,主题应该使用单数形式(比如:An external module cannot…而不是External modules cannot)。
    5. 使用现在时态。

    错误提示信息代码

    • 2000 语言信息
    • 4000 声明生成信息
    • 5000 编译器选项信息
    • 6000 命令行编译器信息
    • 7000 noImplicitAny信息

    普通方法

    1. 不使用ECMAScript 5函数;而是使用这里的。
    2. 不要使用语句;而是使用ts.forEachts.forEachKeyts.forEachValue。注意它们之间的区别。
    3. 如果可能的话,尝试使用ts.forEachts.mapts.filter代替循环。
    1. 使用arrow函数代替匿名函数表达式。
    2. 只要需要的时候才把arrow函数的参数括起来。 比如,(x) => x + x是错误的,下面是正确的做法:
      1. x => x + x
      2. (x,y) => x + y
    3. 总是使用{}把循环体和条件语句括起来。
    4. 开始的{总是在同一行。
    5. 小括号里开始不要有空白. 逗号,冒号,分号后要有一个空格。比如:
      1. for (var i = 0, n = str.length; i < 10; i++) { }
      2. if (x < 10) { }
      3. function f(x: number, y: string): void { }
    6. else要在结束的}后另起一行。