TypeScript 重构"移动到模块范围内的函数"将函数移动到以下变量声明之后

zzoitvuj  于 9个月前  发布在  TypeScript
关注(0)|答案(6)|浏览(111)

TypeScript版本: 3.1.0-dev.20180807
搜索词: 重构函数模块
代码

  1. import "fs";
  2. function foo() {
  3. const bar = 1; // select this line
  4. }
  5. let flag = false;
  6. function doSomethingWithFlag() {
  7. }
  1. 选择带有注解的行
  2. 选择“提取到模块范围内的函数”

预期行为:

  1. import "fs";
  2. function newFunction() {
  3. return 1;
  4. }
  5. function foo() {
  6. const bar = newFunction();
  7. }
  8. let flag = false;
  9. function doSomethingWithFlag() {
  10. }

或者

  1. import "fs";
  2. function foo() {
  3. const bar = newFunction();
  4. }
  5. function newFunction() {
  6. return 1;
  7. }
  8. let flag = false;
  9. function doSomethingWithFlag() {
  10. }

实际行为:

  1. import "fs";
  2. function foo() {
  3. const bar = newFunction();
  4. }
  5. let flag = false;
  6. function newFunction() {
  7. return 1;
  8. }
  9. function doSomethingWithFlag() {
  10. }
rqmkfv5c

rqmkfv5c1#

有几种方法可以解决这个问题:

  1. 在当前函数之前插入一个新函数(预期部分的第一个示例)
  2. 在当前函数之后插入一个新函数(预期部分的第二个示例)
  3. 在作用域末尾插入
    所有参数都破坏了当前的测试,所以我认为在添加更改之前需要决定使用哪个选项。我认为@jessetrinity可以帮助;)。
mlnl4t2r

mlnl4t2r2#

我认为,1和2都有道理。

ttcibm8c

ttcibm8c3#

看起来,所有“提取到X范围内的函数”重构的逻辑是将提取到该范围内下一个函数声明的位置(或该范围的末尾)。
这是否不理想,因为新的函数声明可能出现在很远的地方,或者它会破坏某些东西?

tjjdgumg

tjjdgumg4#

我认为这个逻辑是正确的,但是我不确定为什么这个问题被标记为“错误”。也许主要的关注点是在一个新的/旧的函数声明之前,除了函数之外的所有声明。

puruo6ea

puruo6ea5#

当您最初打开此问题时,AlCalzone是否提供了更多上下文以帮助我们?

vlju58qv

vlju58qv6#

对我来说,问题只是函数的位置。重构是有效的,但函数放置的位置似乎不太合逻辑。
在上面的示例中,newFunctionfoo 应该放在一起,而 flagdoSomethingWithFlag 在逻辑上应该放在一起。
重构后,这一点并不立即清晰,特别是如果两个函数之间有多个变量声明。

相关问题