Javascript Babel类型转换-在操作符周围添加空格。如何绕道?
我有一行代码,我正试图与巴贝尔转换 这,Javascript Babel类型转换-在操作符周围添加空格。如何绕道?,javascript,typescript,babeljs,transformation,codemod,Javascript,Typescript,Babeljs,Transformation,Codemod,我有一行代码,我正试图与巴贝尔转换 这,const[firstName,setFirstName]=useState(“”) 但是,当我运行转换以插入此代码时,周围都有额外的空间。所以我得到了useState(“”) 我觉得这可能是有意的代码格式化。但对于这一特定领域,我希望它不要这样做。我不希望运算符周围的额外空间仅用于我代码的这一部分。。我怎样才能做到这一点 这是我的转换/配置 types.variableDeclaration(“const”[ 类型.variableDeclarator(
const[firstName,setFirstName]=useState(“”)
但是,当我运行转换以插入此代码时,
周围都有额外的空间。所以我得到了useState(“”)
我觉得这可能是有意的代码格式化。但对于这一特定领域,我希望它不要这样做。我不希望运算符周围的额外空间仅用于我代码的这一部分。。我怎样才能做到这一点
这是我的转换/配置
types.variableDeclaration(“const”[
类型.variableDeclarator(
类型.arrayPattern([
类型。标识符(“名字”),
类型标识符(“setFirstName”)
]),
types.binaryExpression(
">",
types.binaryExpression(
“如果你想做一个类型注释,你需要做一个类型注释AST节点,而不是二进制表达式
和括号表达式
等等。AST节点有特定的含义,你所构造的是语法描述,而不是语义描述,因此很奇怪
如果您不知道所需的AST节点类型,通常最好对要生成的代码运行Babel解析器,因为您可以看到所需的节点类型
在您的情况下,您需要以下内容:
const callNode = types.callExpression(
types.identifier("useState"),
[types.stringLiteral("")]
);
callNode.typeParameters = types.tsTypeParameterInstantiation([
types.tsStringKeyword()
]);
const declNode = types.variableDeclaration("const", [
types.variableDeclarator(
types.arrayPattern([
types.identifier("firstName"),
types.identifier("setFirstName")
]),
callNode,
)
]);
所有这些都是用手工构造的,这可能是非常困难的,所以根据你的需要,我会考虑用<代码>模板<代码>来做,例如
const declNode = template.statement({ plugins: ["typescript"] }).ast`
const [firstName, setFirstName] = useState<string>();
`;
const declNode=template.statement({plugins:[“typescript”]}).ast`
const[firstName,setFirstName]=useState();
`;
谢谢。调用表达式正是我需要使用的。我希望有更好的方法来设置类型参数。奇怪的是,调用表达式在我从babel实际解析时出现,但在AST Explorer中,它是一个二进制表达式。您可能没有告诉AST Explorer将文件解析为TS。您粘贴的代码也包含有效的JavaScript,但是它有不同的行为。这是TS严格来说不是JS超集的少数情况之一,但事实上改变了它的解析行为。我所能做的就是选择babel parser,或者typescript parser,否?@SeanMC在babel parser
旁边的齿轮图标让你选择要启用的解析器插件。typescript
就是其中之一,请确保同时禁用flow
。谢谢,我刚刚发现了这一点,正要更新我的评论,但你抢先一步。再次感谢!