这个编码规范是给 TypeScript 开发团队在开发 TypeScript 时使用的。 对于使用 TypeScript 的普通用户来说不一定适用,但是可以做为一个参考。
# 命名
使用 PascalCase 为类型命名。 不要使用 I 做为接口名前缀。 使用 PascalCase 为枚举值命名。 使用 camelCase 为函数命名。 使用 camelCase 为属性或本地变量命名。 不要为私有属性名添加_前缀。 尽可能使用完整的单词拼写命名。
# 组件
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 声明生成信息 6000 命令行编译器信息 7000 noImplicitAny 信息
# 普通方法
5000 编译器选项信息 由于种种原因,我们避免使用一些方法,而使用我们自己定义的。
不使用 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
开始的{总是在同一行。 小括号里开始不要有空白. 逗号,冒号,分号后要有一个空格。比如:
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 要在结束的}后另起一行。
TIP
TypeScript 代码整洁之道 ⭐️ https://github.com/forthealllight/blog/issues/67/ (opens new window)
TIP
TypeScript 编码规范 https://ths.js.org/2020/05/24/TypeScript编码规范/#1-命名及约定/ (opens new window)
TIP
React + TypeScript最佳实践 ⭐️ https://juejin.cn/post/6952696734078369828/ (opens new window)