TypeScript organizeImports does not merge value and type imports

oyxsuwqo  于 4个月前  发布在  TypeScript
关注(0)|答案(3)|浏览(58)

🔍 搜索词

organizeImports type

✅ 可实现性检查清单

⭐ 建议

将值和类型导入合并为一个导入。

📃 激励示例

如果我有以下代码

import { CascadeFunction } from "@rcompat/async/cascade";
import cascade from "@rcompat/async/cascade";

当我运行 organizeImports 时,它将被合并为

import cascade, { CascadeFunction } from "@rcompat/async/cascade";

然而,如果我有

import type { CascadeFunction } from "@rcompat/async/cascade";
import cascade from "@rcompat/async/cascade";

运行 organizeImports 将无济于事,尽管我希望它能将导入合并为

import cascade, { type CascadeFunction } from "@rcompat/async/cascade";

💻 用例

  1. 你打算用这个做什么?
    保持导入整洁。
  2. 当前方法存在哪些不足之处?
    导入可能会加倍,尽管运行 organizeImports ,我可能没有注意到。
  3. 在这段时间内你正在使用什么解决方法?
    如果发现,我会手动合并。
nkoocmlb

nkoocmlb1#

请注意,当它们完全等价时,这些合并,例如:

import { type CascadeFunction } from "@rcompat/async/cascade";
import cascade from "@rcompat/async/cascade";
jdzmm42g

jdzmm42g2#

正如@RyanCavanaugh指出的,当它们完全等价时,它们会合并。我认为这个建议应该被拒绝,因为它会引入有损行为。

想象在这个例子中,从:

import type { CascadeFunction } from "@rcompat/async/cascade";

在那种情况下,不会生成运行时导入。但是,假设你添加了一个单独的运行时导入(可能在重构期间临时自动导入),并且这个建议被实现了:

import cascade, { type CascadeFunction } from "@rcompat/async/cascade";

现在,再三考虑,删除那个新的导入。结果仍然包含一个空的运行时导入,而不是原始的有意类型导入:

import { type CascadeFunction } from "@rcompat/async/cascade";

请注意,上面的情况并不等价,也无法自动转换回 import type ,因为有时候你希望有一个运行时导入(对于不纯模块),而有时候你不需要,所以需要保留写入的导入。

68bkxrlz

68bkxrlz3#

感谢你的解释。虽然这是一个足够合理的理由来拒绝这个建议,但我并不清楚
import type { a } from "b";
import { type a } from "b";
在语义上是否等价。我理解的方式,以及我假设大多数人会理解的方式是,将
type
放在大括号外面相当于在大括号内的各个导入前面写上
type
,以防万一都是类型导入。也就是说,前者只允许类型导入,而后者允许组合值和类型导入,因此,如果大括号内没有值导入,就相当于前者。

相关问题