加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
typescript.js 18.87 KB
一键复制 编辑 原始数据 按行查看 历史
xcatliu 提交于 2022-07-08 07:57 . fix: run eslint in examples
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602
/**
* AlloyTeam ESLint 规则
* https://alloyteam.github.io/eslint-config-alloy/
*
* 贡献者:
* xcatliu <xcatliu@gmail.com>
* heyli <lcxfs1991@gmail.com>
* Xuing <admin@xuing.cn>
* Dash Chen <dc3671@users.noreply.github.com>
* DiamondYuan <admin@diamondyuan.com>
* Roy Revelt <roy@codsen.com>
* Swan <1021808625@qq.com>
* kenve <zwei.xie@gmail.com>
* lzw <mingxin2014@gmail.com>
* ryoliu <sfesh@163.com>
* sunhui04 <sunhui04@meituan.com>
* zoubingwu <zoubingwu@gmail.com>
*
* 依赖版本:
* eslint ^8.18.0
* @babel/core ^7.18.5
* @babel/eslint-parser ^7.18.2
* @babel/preset-react ^7.17.12
* eslint-plugin-react ^7.30.1
* vue-eslint-parser ^9.0.3
* eslint-plugin-vue ^9.1.1
* @typescript-eslint/parser ^5.29.0
* @typescript-eslint/eslint-plugin ^5.29.0
*
* 此文件是由脚本 scripts/build.ts 自动生成
*/
module.exports = {
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
rules: {
'react/sort-comp': 'off',
/**
* 重载的函数必须写在一起
* @reason 增加可读性
*/
'@typescript-eslint/adjacent-overload-signatures': 'error',
/**
* 限制数组类型必须使用 Array<T> 或 T[]
* @reason 允许灵活运用两者
*/
'@typescript-eslint/array-type': 'off',
/**
* 禁止对没有 then 方法的对象使用 await
*/
'@typescript-eslint/await-thenable': 'off',
/**
* 禁止使用 // @ts-ignore // @ts-nocheck // @ts-check
* @reason 这种注释本身就是对特殊代码的说明
*/
'@typescript-eslint/ban-ts-comment': 'off',
/**
* 禁止使用类似 tslint:disable-next-line 这样的注释
*/
'@typescript-eslint/ban-tslint-comment': 'off',
/**
* 禁止使用指定的类型
*/
'@typescript-eslint/ban-types': 'off',
/**
* 类的只读属性若是一个字面量,则必须使用只读属性而不是 getter
*/
'@typescript-eslint/class-literal-property-style': ['error', 'fields'],
/**
* 使用 Map 或 Set 时,必须在构造函数上用泛型定义类型
*/
'@typescript-eslint/consistent-generic-constructors': 'off',
/**
* 必须使用内置的 Record<K, T> 来描述仅包含可索引成员的接口
*/
'@typescript-eslint/consistent-indexed-object-style': 'off',
/**
* 类型断言必须使用 as Type,禁止使用 <Type>,禁止对对象字面量进行类型断言(断言成 any 是允许的)
* @reason <Type> 容易被理解为 jsx
*/
'@typescript-eslint/consistent-type-assertions': [
'error',
{
assertionStyle: 'as',
objectLiteralTypeAssertions: 'never',
},
],
/**
* 优先使用 interface 而不是 type
* @reason interface 可以 implement, extend 和 merge
*/
'@typescript-eslint/consistent-type-definitions': ['error', 'interface'],
/**
* 一致的类型导出语法
*/
'@typescript-eslint/consistent-type-exports': 'off',
/**
* 必须使用 import type 导入类型
*/
'@typescript-eslint/consistent-type-imports': 'off',
/**
* 有默认值或可选的参数必须放到最后
*/
'default-param-last': 'off',
'@typescript-eslint/default-param-last': 'off',
/**
* 禁止使用 foo['bar'],必须写成 foo.bar
* @reason 当需要写一系列属性的时候,可以更统一
*/
'dot-notation': 'off',
'@typescript-eslint/dot-notation': 'off',
/**
* 函数返回值必须与声明的类型一致
* @reason 返回值类型可以推导出来
*/
'@typescript-eslint/explicit-function-return-type': 'off',
/**
* 必须设置类的成员的可访问性
* @reason 将不需要公开的成员设为私有的,可以增强代码的可理解性,对文档输出也很友好
*/
'@typescript-eslint/explicit-member-accessibility': 'error',
/**
* 导出的函数或类中的 public 方法必须定义输入输出参数的类型
*/
'@typescript-eslint/explicit-module-boundary-types': 'off',
/**
* 变量必须在定义的时候赋值
*/
'init-declarations': 'off',
'@typescript-eslint/init-declarations': 'off',
/**
* 类的成员之间是否需要空行
* @reason 有时为了紧凑需要挨在一起,有时为了可读性需要空一行
*/
'lines-between-class-members': 'off',
'@typescript-eslint/lines-between-class-members': 'off',
/**
* 指定类成员的排序规则
* @reason 优先级:
* 1. static > instance
* 2. field > constructor > method
* 3. public > protected > private
*/
'@typescript-eslint/member-ordering': [
'error',
{
default: [
'public-static-field',
'protected-static-field',
'private-static-field',
'static-field',
'public-static-method',
'protected-static-method',
'private-static-method',
'static-method',
'public-instance-field',
'protected-instance-field',
'private-instance-field',
'public-field',
'protected-field',
'private-field',
'instance-field',
'field',
'constructor',
'public-instance-method',
'protected-instance-method',
'private-instance-method',
'public-method',
'protected-method',
'private-method',
'instance-method',
'method',
],
},
],
/**
* 接口中的方法必须用属性的方式定义
* @reason 配置了 strictFunctionTypes 之后,用属性的方式定义方法可以获得更严格的检查
*/
'@typescript-eslint/method-signature-style': 'error',
/**
* 限制各种变量或类型的命名规则
*/
'@typescript-eslint/naming-convention': 'off',
/**
* 禁止使用 Array 构造函数
*/
'no-array-constructor': 'off',
'@typescript-eslint/no-array-constructor': 'off',
/**
* 禁止滥用 toString 方法
*/
'@typescript-eslint/no-base-to-string': 'off',
/**
* 禁止使用容易混淆的非空断言
*/
'@typescript-eslint/no-confusing-non-null-assertion': 'off',
/**
* 禁止使用返回值为 void 的函数的返回值
*/
'@typescript-eslint/no-confusing-void-expression': 'off',
/**
* 禁止重复定义类的成员
* @reason 编译阶段就会报错了
*/
'no-dupe-class-members': 'off',
'@typescript-eslint/no-dupe-class-members': 'off',
/**
* 禁止枚举类型存在两个相同的值
*/
'@typescript-eslint/no-duplicate-enum-values': 'error',
/**
* 禁止 delete 时传入的 key 是动态的
*/
'@typescript-eslint/no-dynamic-delete': 'off',
/**
* 不允许有空函数
* @reason 有时需要将一个空函数设置为某个项的默认值
*/
'no-empty-function': 'off',
'@typescript-eslint/no-empty-function': 'off',
/**
* 禁止定义空的接口
*/
'@typescript-eslint/no-empty-interface': 'error',
/**
* 禁止使用 any
*/
'@typescript-eslint/no-explicit-any': 'off',
/**
* 禁止多余的 non-null 断言
*/
'@typescript-eslint/no-extra-non-null-assertion': 'off',
/**
* 禁止定义没必要的类,比如只有静态方法的类
*/
'@typescript-eslint/no-extraneous-class': 'off',
/**
* 禁止调用 Promise 时没有处理异常情况
*/
'@typescript-eslint/no-floating-promises': 'off',
/**
* 禁止对 array 使用 for in 循环
*/
'@typescript-eslint/no-for-in-array': 'off',
/**
* 禁止使用 eval
*/
'no-implied-eval': 'off',
'@typescript-eslint/no-implied-eval': 'off',
/**
* 禁止给一个初始化时直接赋值为 number, string 的变量显式的声明类型
* @reason 可以简化代码
*/
'@typescript-eslint/no-inferrable-types': 'error',
/**
* 禁止在类之外的地方使用 this
* @reason 只允许在 class 中使用 this
*/
'no-invalid-this': 'off',
'@typescript-eslint/no-invalid-this': 'error',
/**
* 禁止使用无意义的 void 类型
* @reason void 只能用在函数的返回值中
*/
'@typescript-eslint/no-invalid-void-type': 'error',
/**
* 禁止在循环内的函数内部出现循环体条件语句中定义的变量
* @reason 使用 let 就已经解决了这个问题了
*/
'no-loop-func': 'off',
'@typescript-eslint/no-loop-func': 'off',
/**
* 禁止使用超出 js 精度范围的数字
*/
'no-loss-of-precision': 'off',
'@typescript-eslint/no-loss-of-precision': 'error',
/**
* 禁止使用 magic numbers
*/
'no-magic-numbers': 'off',
'@typescript-eslint/no-magic-numbers': 'off',
/**
* 禁止 void 抛出空
*/
'@typescript-eslint/no-meaningless-void-operator': 'off',
/**
* 禁止在接口中定义 constructor,或在类中定义 new
*/
'@typescript-eslint/no-misused-new': 'off',
/**
* 避免错误的使用 Promise
*/
'@typescript-eslint/no-misused-promises': 'off',
/**
* 禁止使用 namespace 来定义命名空间
* @reason 使用 es6 引入模块,才是更标准的方式。
* 但是允许使用 declare namespace ... {} 来定义外部命名空间
*/
'@typescript-eslint/no-namespace': [
'error',
{
allowDeclarations: true,
allowDefinitionFiles: true,
},
],
/**
* 禁止非空断言后面跟着双问号
*/
'@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error',
/**
* 禁止在 optional chaining 之后使用 non-null 断言(感叹号)
* @reason optional chaining 后面的属性一定是非空的
*/
'@typescript-eslint/no-non-null-asserted-optional-chain': 'error',
/**
* 禁止使用 non-null 断言(感叹号)
* @reason 使用 non-null 断言时就已经清楚了风险
*/
'@typescript-eslint/no-non-null-assertion': 'off',
/**
* 禁止重复定义变量
* @reason 禁用 var 之后,编译阶段就会报错了
*/
'no-redeclare': 'off',
'@typescript-eslint/no-redeclare': 'off',
/**
* 禁止无用的联合类型或交叉类型
*/
'@typescript-eslint/no-redundant-type-constituents': 'off',
/**
* 禁止使用 require
* @reason 统一使用 import 来引入模块,特殊情况使用单行注释允许 require 引入
*/
'@typescript-eslint/no-require-imports': 'error',
/**
* 禁止导入指定的模块
*/
'no-restricted-imports': 'off',
'@typescript-eslint/no-restricted-imports': 'off',
/**
* 禁止变量名与上层作用域内的已定义的变量重复
* @reason 很多时候函数的形参和传参是同名的
*/
'no-shadow': 'off',
'@typescript-eslint/no-shadow': 'off',
/**
* 禁止将 this 赋值给其他变量,除非是解构赋值
*/
'@typescript-eslint/no-this-alias': [
'error',
{
allowDestructuring: true,
},
],
/**
* 禁止 throw 字面量,必须 throw 一个 Error 对象
*/
'no-throw-literal': 'off',
'@typescript-eslint/no-throw-literal': 'off',
/**
* 禁止使用类型别名
*/
'@typescript-eslint/no-type-alias': 'off',
/**
* 测试表达式中的布尔类型禁止与 true 或 false 直接比较
*/
'@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off',
/**
* 条件表达式禁止是永远为真(或永远为假)的
*/
'@typescript-eslint/no-unnecessary-condition': 'off',
/**
* 在命名空间中,可以直接使用内部变量,不需要添加命名空间前缀
*/
'@typescript-eslint/no-unnecessary-qualifier': 'off',
/**
* 禁止范型的类型有默认值时,将范型设置为该默认值
*/
'@typescript-eslint/no-unnecessary-type-arguments': 'off',
/**
* 禁止无用的类型断言
*/
'@typescript-eslint/no-unnecessary-type-assertion': 'off',
/**
* 禁止没用的类型限制
*/
'@typescript-eslint/no-unnecessary-type-constraint': 'error',
/**
* 禁止将 any 类型的变量作为函数参数调用
*/
'@typescript-eslint/no-unsafe-argument': 'off',
/**
* 禁止将变量或属性的类型设置为 any
*/
'@typescript-eslint/no-unsafe-assignment': 'off',
/**
* 禁止调用 any 类型的变量上的方法
*/
'@typescript-eslint/no-unsafe-call': 'off',
/**
* 禁止获取 any 类型的变量中的属性
*/
'@typescript-eslint/no-unsafe-member-access': 'off',
/**
* 禁止函数的返回值的类型是 any
*/
'@typescript-eslint/no-unsafe-return': 'off',
/**
* 禁止无用的表达式
*/
'no-unused-expressions': 'off',
'@typescript-eslint/no-unused-expressions': [
'error',
{
allowShortCircuit: true,
allowTernary: true,
allowTaggedTemplates: true,
},
],
/**
* 已定义的变量必须使用
*/
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': 'off',
/**
* 禁止在定义变量之前就使用它
* @reason 编译阶段检查就足够了
*/
'no-use-before-define': 'off',
'@typescript-eslint/no-use-before-define': 'off',
/**
* 禁止出现没必要的 constructor
*/
'no-useless-constructor': 'off',
'@typescript-eslint/no-useless-constructor': 'error',
/**
* 禁止导出空对象
*/
'@typescript-eslint/no-useless-empty-export': 'off',
/**
* 禁止使用 require 来引入模块
* @reason no-require-imports 规则已经约束了 require
*/
'@typescript-eslint/no-var-requires': 'off',
/**
* 必须使用 ! 而不是 as
*/
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
/**
* 限制语句之间的空行规则,比如变量定义完之后必须要空行
*/
'padding-line-between-statements': 'off',
'@typescript-eslint/padding-line-between-statements': 'off',
/**
* 类的构造函数参数作为类属性时,必须加上可访问性修饰符
*/
'@typescript-eslint/parameter-properties': 'off',
/**
* 使用 as const 替代 as 'bar'
* @reason as const 是新语法,不是很常见
*/
'@typescript-eslint/prefer-as-const': 'off',
/**
* 枚举值必须初始化
*/
'@typescript-eslint/prefer-enum-initializers': 'off',
/**
* 使用 for 循环遍历数组时,如果索引仅用于获取成员,则必须使用 for of 循环替代 for 循环
* @reason for of 循环更加易读
*/
'@typescript-eslint/prefer-for-of': 'error',
/**
* 使用函数类型别名替代包含函数调用声明的接口
*/
'@typescript-eslint/prefer-function-type': 'error',
/**
* 使用 includes 而不是 indexOf
*/
'@typescript-eslint/prefer-includes': 'off',
/**
* 枚举类型的值必须是字面量,禁止是计算值
* @reason 编译阶段检查就足够了
*/
'@typescript-eslint/prefer-literal-enum-member': 'off',
/**
* 禁止使用 module 来定义命名空间
* @reason module 已成为 js 的关键字
*/
'@typescript-eslint/prefer-namespace-keyword': 'error',
/**
* 使用 ?? 替代 ||
*/
'@typescript-eslint/prefer-nullish-coalescing': 'off',
/**
* 使用 optional chaining 替代 &&
*/
'@typescript-eslint/prefer-optional-chain': 'error',
/**
* 私有变量如果没有在构造函数外被赋值,则必须设为 readonly
*/
'@typescript-eslint/prefer-readonly': 'off',
/**
* 函数的参数必须设置为 readonly
*/
'@typescript-eslint/prefer-readonly-parameter-types': 'off',
/**
* 使用 reduce 方法时,必须传入范型,而不是对第二个参数使用 as
*/
'@typescript-eslint/prefer-reduce-type-parameter': 'off',
/**
* 使用 RegExp#exec 而不是 String#match
*/
'@typescript-eslint/prefer-regexp-exec': 'off',
/**
* 类的方法返回值是 this 时,类型必须设置为 this
*/
'@typescript-eslint/prefer-return-this-type': 'off',
/**
* 使用 String#startsWith 而不是其他方式
*/
'@typescript-eslint/prefer-string-starts-ends-with': 'off',
/**
* 当需要忽略下一行的 ts 错误时,必须使用 @ts-expect-error 而不是 @ts-ignore
* @reason 使用 @ts-expect-error 可以避免对不会报错的代码设置了 @ts-ignore
*/
'@typescript-eslint/prefer-ts-expect-error': 'off',
/**
* async 函数的返回值必须是 Promise
*/
'@typescript-eslint/promise-function-async': 'off',
/**
* 使用 sort 时必须传入比较函数
*/
'@typescript-eslint/require-array-sort-compare': 'off',
/**
* async 函数中必须存在 await 语句
*/
'require-await': 'off',
'@typescript-eslint/require-await': 'off',
/**
* 使用加号时,两者必须同为数字或同为字符串
*/
'@typescript-eslint/restrict-plus-operands': 'off',
/**
* 模版字符串中的变量类型必须是字符串
*/
'@typescript-eslint/restrict-template-expressions': 'off',
/**
* 禁止在 return 语句里使用 await
*/
'no-return-await': 'off',
'@typescript-eslint/return-await': 'off',
/**
* 联合类型和交叉类型的每一项必须按字母排序
*/
'@typescript-eslint/sort-type-union-intersection-members': 'off',
/**
* 条件判断必须传入布尔值
*/
'@typescript-eslint/strict-boolean-expressions': 'off',
/**
* 使用联合类型作为 switch 的对象时,必须包含每一个类型的 case
*/
'@typescript-eslint/switch-exhaustiveness-check': 'off',
/**
* 禁止使用三斜杠导入文件
* @reason 三斜杠是已废弃的语法,但在类型声明文件中还是可以使用的
*/
'@typescript-eslint/triple-slash-reference': [
'error',
{
path: 'never',
types: 'always',
lib: 'always',
},
],
/**
* interface 和 type 定义时必须声明成员的类型
*/
'@typescript-eslint/typedef': [
'error',
{
arrayDestructuring: false,
arrowParameter: false,
memberVariableDeclaration: false,
objectDestructuring: false,
parameter: false,
propertyDeclaration: true,
variableDeclaration: false,
},
],
/**
* 方法调用时需要绑定到正确的 this 上
*/
'@typescript-eslint/unbound-method': 'off',
/**
* 函数重载时,若能通过联合类型将两个函数的类型声明合为一个,则使用联合类型而不是两个函数声明
*/
'@typescript-eslint/unified-signatures': 'error',
},
};
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化