You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// throwing an Error from typical function, whether sync or async
if (!productToAdd) {
throw new Error("How can I add new product when no value provided?");
}
错误的
// throwing a string lacks any stack trace information and other important data properties
if (!productToAdd) {
throw ("How can I add new product when no value provided?");
}
TSLint 和 Codelyzer 核心规则
[TOC]
TSLint 核心规则
see tslint core rules
(建议)将
() => { return x; }
简写成() => x
。(建议)(TS Only)只有一个函数签名的接口或者字面类型可以写成函数类型。
(强制)类和接口名使用 Pascal 命名方式。
(强制)单行注释使用统一的格式规则。
可选参数如下:
check-space
:所有单行注释必须以一个空格开头,即// comment
形式check-lowercase
:注释第一个字母必须为小写字母(英文适用)check-uppercase
:注释第一个字母必须为大写字母(英文适用)一个配置例子如下:
(强制)不能省略
if/for/do/while
等语句的大括号。(建议)每个文件必须以一个新行(newline)结尾。
(建议)如果使用
for...in
语法,必须要使用if
来过滤非自身属性。(建议)禁止直接使用
import
或者require
整个模块;使用时,只能导入该模块的子模块。例如,rxjs 代码库特别大,很多运算符都用不大,因此可以针对 rxjs 库编写规则如下:
(建议)保证 import 语句大括号旁边有�空格,也即:
(强制)缩进使用统一的 tabs 或 spaces。
例如设置4个空格的设置如下:
(TS Only)定义接口时,优先采用接口声明方式(
interface T { ... }
),而不是类型字面量形式(type T = { ... }
)。(强制)只允许 label 出现在合理的位置,例如 (
do/while/for/switch
) 语句。限定一行的最大长度,例如设置一行不能超过 140 个字符,设置如下:
(TS Only) 对类的成员需要显示声明可访问性。
可选参数如下:
get/set
访问器需要显示声明�强制成员顺序。
例如静态变量需要先于实例变量,变量先于函数,可以设置如下:
禁止使用
arguments.callee
,因为这让编译器无法�优化代码,会导致潜在的性能问题。禁止使用位运算符(除了
&
和|
外)。禁止使用 console 语句(生产环境代码)。
禁止直接使用
String
、Number
和Boolean
构造函数。可以使用
Number(foo)
形式,但是不能使用new Number(foo)
形式。禁止出现 debugger 语句(生产环境代码)。
如果构造函数中
super
调用出现了多次,给出警告。不允许出现空的语句块。
(TS Only) 禁止空的接口。
禁止使用
eval
语句。(TS Only) 对于简单的�变量类型不需要显示指定类型(例如 number, string, boolean)。
可选参数如下:
一个例子如下:
(TS Only) 如果显示给接口定义构造函数或者给类定义
new
,给出警告。(TS Only)禁止非空推断。
禁止覆盖变量声明。
禁止非必要的字符串字面量访问,例如允许
obj[prop-erty]
,而不允许obj['propety']
。不只是抛出简单的字符串
正确的
错误的
禁止 case 语句 fall through(也就是没有用 break 语句)。
例如:
然而这种是合理的(存在多个连续的 case 语句):
不允许尾部空格。
禁止
var/let
语句或者解构语句初始化成undefined
。禁止未使用的表达式语句(没有被赋值给变量或者函数调用)。
变量�必须先声明后使用。
不允许使用 var 关键字。
帮助维护代码库中的可读样式。
额外的空白行会占用额外的空间,并且对代码的语义理解没有什么帮助。当屏幕上可以容纳的组件更少时,就更难读取文件。如果你发现一个文件太大,你觉得有必要用额外的空行或注释来分割它们,考虑将你的文件分割成更小的文件。
对象中的 key 必须按照字母表顺序排列,在避免 merge 冲突时有用。
一些特定的关键字需要出现在同一行,例如
catch
、finally
、else
、open-brace
优先使用 const。
引号设置,例如设置使用单引号:
parseInt
必须提供进制参数。分号设置,例如设置必须要分号:
比较需要使用
===
和!==
。可选参数如下:
(TS Only) 类型定义时需不需要空格。
保证
typeof
和正确的字符串类型来比较。(TS Only) 如果两个函数可以�通过 optional 和 rest 参数合并成一个,给出警告。
检测变量名称可能出现的各种错误。
强制空格样式规范。
得改成
Codelyzer 核心规则
see codelyzer core rules
指令选择器允许命名方式。
组件选择器允许命名方式。
使用
@Input()
装饰器,而不是组件或者指令元数据中的inputs
属性。使用
@Output()
装饰器,而不是组件或者指令元数据中的outputs
属性。使用
@HostProperty
装饰器而不是组件或者指令元数据中的host
属性。是否允许重命名 Input 变量。
是否允许重命名 Output 变量。
如果使用生命周期函数,必须在组件中实现该接口。
管道必须实现
PipeTransform
接口。组件名必须添加
Component
后缀(后缀可自定义)。指令名必须添加
Directive
后缀(后缀可自定义)。不允许在模板中使用组件中不存在的属性和方法。
坚持命名事件时,不要带前缀 on。
坚持把事件处理器方法命名为 on 前缀之后紧跟着事件名。
为何?与内置事件命名一致,例如按钮点击。
为何?Angular 允许另一种备选语法 on-*。如果事件的名字本身带有前缀 on,那么绑定的表达式可能是 on-onEvent。
output事件触发器回调的函数不加
on
前缀,因为不加的话可以与按钮点击事件保持一致,并且angular支持on-*
方法,模板中只能使用 public 属性和方法。
服务必须使用
@Injectable()
装饰。The text was updated successfully, but these errors were encountered: