这是一个关于VS Code中IntelliSense命令的问题。在lambda函数内部使用没有大括号的IntelliSense命令时,新常量会生成在函数外部,导致构建错误。为了解决这个问题,需要先运行Add braces to arrow function
命令,然后再执行Extract to constant in enclosing scope
命令,这样才能正确地生成
const doSomething = (i: number) => {
const newLocal = i + 2;
return (newLocal) * 5;
};
。
1条答案
按热度按时间rsl1atfo1#
重复的#18924。有趣的是,根据这里可以引发的诊断,这个重构甚至不应该成功:
TypeScript/src/services/refactors/extractSymbol.ts
第1918行到第1924行的634d3a1
| | // 特殊情况:在最内层作用域中,所有用法都可用。 |
| | // (计算值反映了作用域顶部的值,但局部变量实际上将与提取的表达式在同一级别声明)。 |
| | if(i>0&&(scopeUsages.usages.size>0||scopeUsages.typeParameterUsages.size>0)){ |
| | consterrorNode=isReadonlyArray(targetRange.range) ? targetRange.range[0] : targetRange.range; |
| | constantErrorsPerScope[i].push(createDiagnosticForNode(errorNode,Messages.cannotAccessVariablesFromNestedScopes)); |
| | } |
然而,在这个特定的场景中,源文件成为“最内层作用域”(因为没有主体的箭头被忽略),而这段代码只是假设这是可以的,甚至不测试这个(如代码注解中描述的特殊情况)。
忽略它是可以的,因为对没有主体的箭头的支持应该“修复”这个特殊情况,使其始终为真。