gpt4 book ai didi

javascript - jscodeshift 抛出错误 : does not match type string

转载 作者:行者123 更新时间:2023-11-29 20:43:32 24 4
gpt4 key购买 nike

我正在尝试改变这个:

function twist() {
this.settings = null;
delete this.settings;
this.whatever = null;
this.something['hello'] = null;
this.hello = "test";
}

进入这个:

function twist() {
delete this.settings;
delete this.settings;
delete this.whatever;
delete this.something['hello'];
this.hello = "test";
}

所以我为 jscodeshift 编写了以下代码模块:

export default function transformer(file, api) {
const j = api.jscodeshift;

return j(file.source)
.find(j.ExpressionStatement, {expression: j.BinaryExpression})
.filter(p => p.value.expression.operator === "=")
.filter(p => p.value.expression.right.type === "Literal" && p.value.expression.right.raw === "null")
.filter(p => p.value.expression.left.type === "MemberExpression")
.replaceWith(path => j.unaryExpression("delete", path.value.expression.left))
//.filter(p => { console.log(p.value); return true;})
.toSource();
}

但是我得到了错误:

{operator: delete, argument: [object Object], prefix: true, loc: null, type: UnaryExpression, comments: null} does not match type string

最佳答案

您的代码所做的是将 ExpressionStatement 替换为 UnaryExpression。将 Statements 替换为 Expressions 可能很挑剔。

它还会查找 BinaryExpression,但 BinaryExpression 没有 = 作为运算符。

您的过滤器实际上应该是 AssignmentExpression,因为您真正想要做的是将 ExpressionStatement 中的 AssignmentExpression 替换为UnaryExpression,从而用另一个替换一个 Expression

export default function transformer(file, api) {
const j = api.jscodeshift;

return j(file.source)
.find(j.AssignmentExpression, {
operator: "=",
right: {
type: "Literal",
value: null
}
})
.replaceWith(({ node: { left } }) => j.unaryExpression("delete", left))
.toSource();
}

这是一个 ASTExplorer 示例:https://astexplorer.net/#/gist/afb441a9709f82cd6fc3ba2860c98823/6f21cdb12a5a43aa1ca460aaa40d9ef63e1ef4bc

关于javascript - jscodeshift 抛出错误 : does not match type string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55024119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com