npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

tslint-config-info

v0.1.2

Published

common tslint config

Downloads

8

Readme

为什么使用 tslint

ts 项目本身具备很强的静态错误检查能力,配合 tslint 工具,更可以避免一些写法上的常见错误及统一代码风格,增加项目可读性、可维护性,在运行前减少一些不必要的错误,提升整体代码质量。

tslint 更多详细介绍 https://github.com/palantir/tslint

tslint-config-info

tslint-config-infotslint:recommended 推荐的静态错误检查及代码风格上做了相应的增减,适合团队使用。

其中 tslint:recommended 中默认开启的配置如下:

https://github.com/palantir/tslint/blob/master/src/configs/recommended.ts

在此基础上增加的相关配置如下:

{
  'rules': {
    'no-console': false,
    'no-empty': false,
    'object-literal-sort-keys': false,

    // 定义函数时如果用到了覆写,则必须将覆写的函数写到一起
    'adjacent-overload-signatures': true,

    // 禁用指定类型
    'ban-types': false,

    // 必须指定类的成员的可访问性
    'member-access': false,

    // 禁止定义接口空的接口
    'no-empty-interface': false,

    // 禁止对函数的参数重新赋值
    'no-parameter-reassignment': true,

    // 接口名称必须已 I 开头
    'interface-name': false,

    // import 必须排序
    'ordered-imports': false,

    // 禁止使用 var b = require('b'); 来引入模块
    // 有时需要动态引入,还是需要用 require
    'no-var-requires': false,

    // 必须使用箭头函数,除非是单独的函数声明或是命名函数
    'only-arrow-functions': [
      true,
      'allow-declarations',
      'allow-named-functions'
    ],

    // 必须使用 for of 循环替代 for 循环
    'prefer-for-of': false,

    // 类型定义的冒号前面必须没有空格,后面必须有一个空格
    'typedef-whitespace': [
      true,
      {
        'call-signature': 'nospace',
        'index-signature': 'nospace',
        'parameter': 'nospace',
        'property-declaration': 'nospace',
        'variable-declaration': 'nospace'
      },
      {
        'call-signature': 'onespace',
        'index-signature': 'onespace',
        'parameter': 'onespace',
        'property-declaration': 'onespace',
        'variable-declaration': 'onespace'
      }
    ],

    // if 后面必须有 {,除非是单行 if
    'curly': [
      true,
      'ignore-same-line'
    ],

    // 禁止对 array 使用 for in 循环
    'no-for-in-array': true,

    // 禁止没必要的 return await
    'no-return-await': true,

    // 禁止在数组中出现连续的逗号,如 let foo = [,,]
    'no-sparse-arrays': true,

    // switch 的 case 必须 return 或 break
    'no-switch-case-fall-through': true,

    // 禁止 finally 内出现 return, continue, break, throw 等
    // finally 会比 catch 先执行
    'no-unsafe-finally': true,

    // 禁止无用的表达式
    'no-unused-expression': true,

    // 变量必须先定义后使用
    'no-use-before-declare': true,

    // 禁止使用 var
    'no-var-keyword': true,

    // parseInt 必须传入第二个参数
    'radix': true,

    // 必须使用 === 或 !==,禁止使用 == 或 !=,与 null 比较时除外
    'triple-equals': [
      true,
      'allow-null-check'
    ],
    'cyclomatic-complexity': [
      true,
      20
    ],

    // 行尾必做有分号
    'semicolon': false,

    // 文件最后一行必须要多一行
    "eofline": false,

    // 禁止使用废弃(被标识了 @deprecated)的 API
    'deprecation': true,

    // 一个缩进必须用2个空格替代
    "indent": [true, "spaces", 2],

    // 禁止出现重复的 import
    'no-duplicate-imports': true,

    // 禁止一个文件中出现多个相同的 namespace
    'no-mergeable-namespace': true,
    'align': false,

    // 限制必须使用 T[] 或 Array<T> 之中的一种来定义数组的类型
    'array-type': false,

    // 箭头函数的参数必须有小括号
    'arrow-parens': false,

    // 箭头函数的函数体只有 return 语句的时候,必须简写
    'arrow-return-shorthand': false,

    // 类名与接口名必须为驼峰式
    'class-name': true,

    // 限制单行注释的规则
    'comment-format': false,

    // 类、函数、方法、属性必须写注释
    'completed-docs': false,

    // 文件类型必须时 utf-8
    'encoding': true,

    // 注释必须符合 JSDoc 规范
    'jsdoc-format': false,

    // new 后面只必须有一个空格
    'new-parens': true,

    // 禁止连续超过三行空行
    'no-consecutive-blank-lines': [
      true,
      5
    ],

    // 定义过的变量必做使用
    'no-unused-variable': false,

    // 禁止行尾有空格
    'no-trailing-whitespace': false,

    // 对象的 key 必须用引号包起来
    'object-literal-key-quotes': false,

    // 变量申明必须每行一个,for 循环的初始条件中除外
    'one-variable-per-declaration': [
      true,
      'ignore-for-loop'
    ],

    // if 后的 { 禁止换行
    'one-line': true,

    // 必须使用单引号,jsx 中必须使用双引号
    'quotemark': [
      true,
      'single',
      'jsx-double',
      'avoid-template',
      'avoid-escape'
    ],

    // 函数名前必须有空格
    'space-before-function-paren': [
      true,
      'asyncArrow'
    ],

    // 括号内首尾禁止有空格
    'space-within-parens': [
      true,
      0
    ],

    'whitespace': [
      true,
      'check-branch',
      'check-decl',
      'check-operator',
      'check-module',
      'check-separator',
      'check-rest-spread',
      'check-type',
      'check-typecast',
      'check-type-operator',
      'check-preblock'
    ]
  }
}

如何使用

安装

npm install --save-dev tslint-config-info

配置文件

在项目根目录中新建文件 tslint.json 配置文件

普通 ts 项目

// tslint.json
{
  "root": true,
  "extends": "tslint-config-info",
  "rules": {
    //这里可根据项目实际需求,添加和覆盖相应的规则
    // ...
  }
}

typescript + react 项目

// tslint.json
{
  "root": true,
  "extends": "tslint-config-info/react",
  "rules": {
    //这里可根据项目实际需求,添加和覆盖相应的规则
    // ...
  }
}

其中对于 JSX 的检测添加了 tslint-react 插件支持,默认开启的配置如下:

{
  rules: {
    "jsx-alignment": true,
    "jsx-boolean-value": true,
    "jsx-curly-spacing": [true, "never"],
    "jsx-equals-spacing": [true, "never"],
    "jsx-key": true,
    "jsx-no-bind": true,
    "jsx-no-lambda": true,
    "jsx-no-multiline-js": true,
    "jsx-no-string-ref": true,
    "jsx-self-close": true,
    "jsx-wrap-multiline": true
  }
}

tslint-react 更多详细介绍 https://github.com/palantir/tslint-react

非 ts 项目,可以使用 eslint-config-info

具体使用详见 https://github.com/zhangchen2397/eslint-config-info

执行脚本

// 在 package.json script 中添加
// 需要先在项目根目录下配置好 tsconfig.json 配置文件
"lint": "tslint -p tsconfig.json src/**/*.{ts,tsx}"

// 或者
"lint": "tslint -c tslint.json src/**/*.{ts,tsx}"

tips

临时屏蔽规则

// tslint:disable-next-line no-var-keyword
var tslint = 'tslint';

配合编辑器高亮提示

vscode, webstorm 都有相应的插件,当项目配置了相应的 tslint.json 配置文件时,会即可高亮提示,非常方便。

由于 vscodetypescript 都是由 Microsost 开发,vscodets 的支持非常友好。

tips

几种常见错误检测举例

// no-cond-assign 禁止条件表达式中出现赋值操作符
// Check the user's job title
if (user.jobTitle = "manager") {
  // user.jobTitle is now incorrect
}

// no-constant-condition 禁止在条件中使用常量表达式
if (false) {
  doSomethingUnfinished();
}
	
// no-unmodified-loop-condition 禁用一成不变的循环条件
while (node) {
  doSomething(node);
}
node = other;

for (var j = 0; j < items.length; ++i) {
  doSomething(items[j]);
}

while (node !== root) {
  doSomething(node);
}

// radix 强制在parseInt()使用基数参数
var num = parseInt("071");   // 57

// no-return-await 禁止没必要的 return await
async function foo() {
  return await bar();
}

// eqeqeq 要求使用 === 和 !==
if (x == 42) { }
if ("" == text) { }
if (obj.getStuff() != undefined) { }

集成至开发流程及工具中

如果强制要求,可以把检测过程添加到 git 流程中,检测到有 error 时,不允许提交。