用 TypeScript 编写的 Babel 插件参数的类型是什么?

问题描述

我正在用 TypeScript 编写 Babel 插件,并且一直在努力寻找很多这样做的示例或文档。例如,我正在编写一个带有以下签名的访问者插件

export default function myPlugin({ types: t }: typeof babel): Pluginobj {

我从以下几个方面获​​得:

import type { Pluginobj,PluginPass } from '@babel/core';

困扰我的部分是来自于的 { types: t }: typeof babel

import type * as babel from '@babel/core';

我在网上找到的几个例子都使用了这个,但这真的是应该如何输入的吗?

解决方法

根据 2019 年开放的 Babel issue,看起来 Babel 的类型分为 L-7'@babel/core。不要混淆的一件事,与 Node 的其他一些“类型”包不同,@babel/types 不是 Babel 的“类型”包,而是包含手动构建 AST 和检查 AST 节点类型的方法。所以它们基本上是具有不同目标的不同包。

Babel 包的挑战在于它们似乎使用命名空间(通配符)导入,而且包本身似乎没有任何类型。

解决此问题的一种快速方法:

@babel/types

这使得代码更具可读性,直到这个开放的 Babel 问题得到修复。