如何使用tslint的导入排序规则来订购导入

Den*_*nis 35 import tslint

在我的项目中,使用了tslint的"import-ordering"规则

import CopyLensModal from './CopyLensModal';
import FetchStatus from '../../../../../state/generic/models/FetchStatus';
import FlexRow from '../../../../generic/components/FlexRow';
import Geofilter from '../../../../../state/geofilter/models/Geofilter';
import Input from '../../../../generic/components/Input';

import * as React from 'react';
import * as salert from 'sweetalert';

import { func } from '../../../../../types/func';
import { Iterable } from 'immutable';
import { Button } from 'react-bootstrap';
Run Code Online (Sandbox Code Playgroud)

tslint对此订单不满意并因错误而崩溃

[2,1]:组内的导入源必须按字母顺序排列.
[4,1]:组内的导入源必须按字母顺序排列.

这个页面没有多大帮助,我试图以多种不同的方式进口,但没有运气.哪个订单是正确的?

car*_*ant 52

我同意这令人困惑.问题是源字符串比较包括../..模块名称的部分,因此要安抚规则,您需要按如下方式对它们进行排序:

import FetchStatus   from '../../../../../state/generic/models/FetchStatus';
import Geofilter     from '../../../../../state/geofilter/models/Geofilter';
import FlexRow       from '../../../../generic/components/FlexRow';
import Input         from '../../../../generic/components/Input';
import CopyLensModal from './CopyLensModal';
Run Code Online (Sandbox Code Playgroud)

该规则有两个部分,可以配置为分别强制执行导入名称和源的排序.要仅强制执行名称排序,您可以使用如下配置:

"ordered-imports": [true, {
  "import-sources-order": "any",
  "named-imports-order": "case-insensitive"
}]
Run Code Online (Sandbox Code Playgroud)

这会导致像这样的导入错误:

import { A, C, B } from 'some-module';
Run Code Online (Sandbox Code Playgroud)

但不会强制对模块路径等进行排序.

  • 如果您使用VSCode和TS 2.8,则可以使用[Organize Imports](https://blogs.msdn.microsoft.com/typescript/2018/03/27/announcing-typescript-2-8/#organize-imports)轻松排序和清理您的导入:) (8认同)
  • 谢谢!太混乱了.我以为我已经失去了对字母表的掌控一会儿 (4认同)

Osw*_*ldo 9

如果没有添加空的新行作为导入组之间的分隔,也会发生此错误。

import * as fs from 'fs';
import * as os from 'os';

import * as bar from './bar';
import * as foo from './foo';
Run Code Online (Sandbox Code Playgroud)

另请注意,错误是否显示如下:

***(5,1): Import sources within a group must be alphabetized.***
Run Code Online (Sandbox Code Playgroud)

这意味着在指定的文件中转到第5行,然后按Enter以在其中添加新的空行作为分隔符。

我做到了,这解决了我的问题。有关此问题的更多参考,请查看此页面