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

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

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

import "fs";

function foo() {
	const bar = 1; // select this line
}

let flag = false;
function doSomethingWithFlag() {
}
  1. 选择带有注解的行
  2. 选择“提取到模块范围内的函数”

预期行为:

import "fs";

function newFunction() {
	return 1;
}

function foo() {
	const bar = newFunction();
}

let flag = false;
function doSomethingWithFlag() {
}

或者

import "fs";

function foo() {
	const bar = newFunction();
}

function newFunction() {
	return 1;
}

let flag = false;
function doSomethingWithFlag() {
}

实际行为:

import "fs";

function foo() {
	const bar = newFunction();
}

let flag = false;
function newFunction() {
	return 1;
}

function doSomethingWithFlag() {
}
rqmkfv5c

rqmkfv5c1#

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

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

mlnl4t2r2#

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

ttcibm8c

ttcibm8c3#

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

tjjdgumg

tjjdgumg4#

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

puruo6ea

puruo6ea5#

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

vlju58qv

vlju58qv6#

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

相关问题