编码规范
本编码规范主要参考 TypeScript 官方推荐编码规范,根据实际情况修改而来。这个编码规范是给 TypeScript 开发团队在开发 TypeScript 时使用的 对于使用 TypeScript 的普通用户来说不一定适用,但是可以做为一个参考
命名
- 使用 PascalCase 为类型命名
type PascalCase = string - 不要使用
I做为接口名前缀 - 使用 PascalCase 为枚举值命名
export enum PayStatus {
/** 待支付 */
Waiting = 1,
/** 支付中 */
Paying = 20,
/** 支付失败 */
Failed = 25,
/** 成功 */
Success = 50,
/** 关闭 */
Closed = 60,
/** 系统错误 */
SystemError = 70
}
- 使用 camelCase 为函数命名
- 使用 camelCase 为属性或本地变量命名
- 组件和类使用 PascalCase
- 不要为私有属性名添加
_前缀 - 尽可能使用完整的单词拼写命名
- 当定义布尔类型的变量时,应该使用 is 或者 has 作为变量的前缀,🌰
isShow,hasOwner
// bad
let bark = false;
// good
let isBark = false;
// bad
let ideal = true;
// good
let areIdeal = true;
// bad
let owner = true;
// good
let hasOwner = true;
- 在定义常量时使用大写,因为它们是不变的变量,如果变量声明名称中包含多个单词,就应该使用 UPPER_SNAKE_CASE,
🌰
const BASE_URL = 'https://xxx.com'
组件
- 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要在结束的}后另起一行
参考:
TypeScript 官方推荐编码规范: zhongsp.gitbooks.io/typescript-…
Google TypeScript 风格指南: zh-google-styleguide.readthedocs.io/en/latest/g…
JavaScript 命名约定最佳实践:juejin.cn/post/707625…