GoLand 2025.2 Help

重构 TypeScript

重构是指在不改变应用程序行为的情况下更新源代码。 重构有助于让您的代码更加稳固、 干净且易于维护。

移动重构

除了 移动文件和文件夹之外,GoLand 还允许移动 TypeScript 顶层符号。 移动符号重构适用于 ES6 模块中的类、函数和变量。

移动类、函数或变量

  1. 选择要移动的符号。

  2. F6 ,或从主菜单或所选内容的上下文菜单中选择 重构 | 移动。 或者,选择 重构 | 重构此项 或按 Ctrl+Alt+Shift+T ,然后从列表中选择 移动

    会打开 移动模块成员 对话框。

  3. 指定目标文件并选择要移动的成员。

  4. 默认情况下,GoLand 会自动将成员的可见性提升到所需的级别。 如果希望保持可见性级别不变,请在 可见性 中点击 按原样

上移类成员重构

向上移动类成员重构会将类方法向上移动至类层次结构中——从当前类移至其超类或所实现的接口。

假设您有一个类 AccountingDepartment ,它继承自抽象类 Department 并实现接口 ReportingDepartment

abstract class Department { constructor(public name: string) { } printName(): void { console.log("Department name: " + this.name); } } interface ReportingDepartment { generateReports(): void } class AccountingDepartment extends Department implements ReportingDepartment { constructor() { super("Accounting and Auditing"); } printMeeting(): void { console.log("The Accounting Department meets each Monday at 10 a.m"); } generateReports(): void { console.log("Generating accounting reports..."); } }

示例 1:将类方法移动到超类

在此示例中,方法 PrintMeeting()AccountingDepartment 移动到了 Department

abstract class Department { constructor(public name: string) { } printName(): void { console.log("Department name: " + this.name); } printMeeting(): void { console.log("The Accounting Department meets each Monday at 10 a.m"); } } interface ReportingDepartment { generateReports(): void } class AccountingDepartment extends Department implements ReportingDepartment { constructor() { super("Accounting and Auditing"); } generateReports(): void { console.log("Generating accounting reports..."); } }

示例 2:将类方法移动到接口

在此示例中,方法 PrintMeeting() 从类 AccountingDepartment 复制到了接口 ReportingDepartment

abstract class Department { constructor(public name: string) { } printName(): void { console.log("Department name: " + this.name); } } interface ReportingDepartment { generateReports(): void printMeeting(): void } class AccountingDepartment extends Department implements ReportingDepartment { constructor() { super("Accounting and Auditing"); } printMeeting(): void { console.log("The Accounting Department meets each Monday at 10 a.m"); } generateReports(): void { console.log("Generating accounting reports..."); } }

将类的方法移至超类或接口

  1. 将光标置于要上移成员的类中。

  2. 从主菜单或上下文菜单中选择 重构 | 向上移动成员。 会打开 向上移动成员 对话框。

  3. 从列表中选择要移动方法的超类或接口。

  4. 要上移方法,请在 要向上移动的成员 列表中勾选其旁的复选框。 如适用,请勾选方法旁的 设为 abstract 复选框以进行移动。

重命名重构

除了 重命名文件和文件夹 (适用于所有语言环境)外,您还可以重命名类、方法、变量、参数和字段。 GoLand 会更改符号在声明处以及默认情况下其在当前项目中的所有用法中的名称。

重命名重构会在原处执行,但您可以按 Shift+F6重命名 对话框中配置重构作用域。

要默认打开此对话框,请打开 设置 对话框(Ctrl+Alt+S ),转到 编辑器 | 代码编辑 ,并在 指定重构选项 区域中选择 在模态对话框中 选项。

  1. 在编辑器中,选择要重命名的类、方法、变量或字段,然后按 Shift+F6 ,或在上下文菜单中选择 重命名

  2. 在带画布的字段中,指定符号的新名称。 输入名称或从列表中选择合适的名称。

  3. 可选:

    点击突出显示符号旁的 注释和字符串中的重命名图标 文本出现中的重命名图标 来打开 同时重命名位置 弹出窗口,并勾选 在注释和字符串中查找 以及 查找文本出现的位置 复选框,以便在注释、字符串字面量和文本中重命名符号的用法。

  4. 可选:

    要打开带有更多选项的 重命名 对话框,请再次按 Shift+F6

    • 勾选 在注释和字符串中搜索 复选框,以便在注释、文档注释和字符串字面量中重命名符号的用法。

    • 勾选 搜索文本出现位置 复选框,以便在 HTML 和项目中包含的其他文件的文本中重命名匹配的符号。

    • 勾选 在 JavaScript 文件中搜索 复选框,以便在生成的 JavaScript 代码中重命名符号的用法。

    • 勾选 查找动态引用 复选框,以便重命名符号的动态用法。

      请注意,在重构中包含动态用法可能会导致错误的重命名,如下面示例所示。 在此示例中,由于 e 的类型为 any ,因此 targetconsole.log(e.target) 中可能被更改为 myTarget ,因为它也可能是 myInt

      interface myInt { target: string } function onClick(e: any) { console.log(e.target); }
      interface myInt { myTarget: string } function onClick(e: any) { console.log(e.myTarget); }
  5. 为避免错误重命名,请在应用之前 预览更改

    默认情况下,在 重构预览 工具窗口中,所有符号的动态用法都会被标记为已排除,并归类显示在 代码中对 <symbol> 的动态引用 节点下。 要将重构应用于某个用法,请在其上下文菜单中选择 包含

保持类及其包含文件名称一致

当您重命名类时,如果文件名与类名相同,GoLand 还会建议对该文件进行重命名。 如果您接受建议,GoLand 将更新其他文件中 import 语句中该文件的名称。

如果您拒绝此建议,可以稍后随时使用 重命名文件... 意图操作重命名该文件。 这在您刚创建新文件后开始输入类或接口并想出更好的名称时非常有用。

另一个意图操作建议将类移到具有相应名称的新文件中。 建议文件名的格式由 文件名命名约定 列表中在 代码样式:JavaScript 页面上选择的样式决定。

使文件名与相应类名保持一致

  1. 将插入符号置于类名上并按下 Alt+Enter

  2. 从意图列表中选择 将文件重命名为 <class_name.ts> 以匹配类名将类 <class_name> 移动到文件 <class_name.ts>

提取/引入重构

GoLand 提供多种 提取重构,以引入参数、变量、常量、字段、方法和函数。 要运行这些重构操作之一,请选择要重构的表达式并选择 重构 | <target>。 您可以选择整个表达式,或将插入符号置于表达式中的任意位置,GoLand 将协助您完成选择。

引入参数

使用 引入参数重构将函数调用中的表达式替换为参数。 GoLand 将相应地更新函数的声明及其调用方式。 新参数的默认值可以在函数体中初始化,也可以通过函数调用传递。

假设在函数 greeter() 中有一段包含硬编码 "Hello, " 的代码。

function greeter(firstName : String, lastName : String) { return "Hello, " + firstName + " " + lastName; } document.body.innerHTML = greeter("Jane","User");

通过“引入参数”重构,您可以将此硬编码的 "Hello, " 替换为一个 greeting 参数。 新的 greeting 参数可以提取为 可选必需

示例 1:提取一个可选参数

一个新参数 greeting 被提取为可选参数。 新参数通过函数默认参数语法被添加到 greeter() 的定义中。 greeter() 的调用不会发生变化。

function greeter(firstName : String, lastName : String, greeting = "Hello, ") { return greeting + firstName + " " + lastName; } document.body.innerHTML = greeter("Jane","User");

示例 2:提取一个必需参数

在此示例中,一个新参数 greeting 被提取为必需参数。 因此,相应的函数调用 (document.body.innerHTML = greeter(user); 也会相应更改。

function greeter(firstName : String, lastName : String, greeting: string) { return greeting + firstName + " " + lastName; } document.body.innerHTML = greeter("Jane", "User", "Hello, ");

引入参数

  1. 在编辑器中,将插入符号置于要转换为参数的表达式内,按下 Ctrl+Alt+P 或从上下文菜单中选择 重构 | 引入参数

    或者,请执行以下操作之一:

    • Ctrl+Alt+Shift+T 并选择 引入参数

    • 转至 重构 | 提取 | 参数

  2. 如果在当前位置检测到多个表达式,请从 表达式 列表中选择所需表达式。

  3. 如果找到多个所选表达式的出现项,请从 发现多个项 列表中选择 仅替换此项替换所有项。 最后,将显示用于配置重构的弹出窗口。

  4. 选择 生成 JSDoc 以生成 JSDoc 注释块。 如果您需要指定自定义的默认参数值,这可能会很有帮助。

  5. 选择新参数的初始化位置,并在适用时指定其默认值:

    • 如果选中 可选参数 复选框,参数将使用默认值在函数体内初始化。

    • 如果清除 可选参数 复选框,则默认参数值将通过现有函数调用传递。 所有函数调用都将根据新的函数签名变更,并在函数体内添加参数初始化代码。

    最初,GoLand 将调用重构的位置处的表达式作为默认值。 在大多数情况下,您无需更改默认值。 如确有需要,请在 JSDoc 注释中按照 @param <parameter name> - <default value> 格式指定另一个默认值。

    请访问 TypeScript 官方网站了解有关可选参数和默认参数的更多信息。

  6. 在列表中双击接受建议的参数名,或在红色画布字段中指定自定义名称。 准备就绪后按下 Enter

选择重构模式

您可以直接在编辑器中提取参数(即时模式) 如上所述 ,或使用 引入参数对话框。 这两种方法非常相似,区别如下:

  • 预览重构结果

    在对话框中,您可以点击 预览 ,并在 查找 工具窗口的专用选项卡中查看预期更改。 即时模式中不提供此功能。

  • 指定默认参数值

    在对话框中,GoLand 会在 字段中建议默认参数值,您可以接受建议或指定其他值。 在即时模式中,GoLand 把调用重构位置处的表达式视为默认参数值。 若要指定其他值,您必须使用 JSDoc 注释块。

引入变量

使用 引入变量 重构可将某个表达式替换为 函数作用域变量(var)块作用域变量(let)块作用域常量(const)。 这一重构可使源代码更易读、更易维护。 它还能帮助您避免使用未经说明其值或用途的硬编码常量。

function Multiplication(a : number, b : number) { let d = (a + b) * (a + b); return d; } var e = Multiplication(4, 6);
function Multiplication(a : number, b : number) { let c = a + b; let d = (c) * (c); return d; } var e = Multiplication(4, 6);

引入变量

  1. 在编辑器中,选择要转换为变量的表达式,按下 Ctrl+Alt+V ,然后从上下文菜单中选择 重构 | 引入变量

    或者,执行以下操作之一:

    • 按下 Ctrl+Alt+Shift+T ,然后选择 引入变量

    • 转到 重构 | 提取 | 变量

  2. 如果在当前插入点位置检测到多个表达式,请从 表达式 列表中选择所需的表达式。

  3. 如果找到所选表达式的多个出现位置,请从 发现多个项 列表中选择 仅替换此项替换所有项

    最后,将出现用于配置重构的弹出窗口。

  4. 从列表中选择要用于新变量声明的语句:

  5. 通过双击列表中的名称接受一个建议的参数名,或在带红色标识的字段中指定自定义名称。 准备好后按 Enter

选择重构模式

您可以直接在编辑器中(以就地模式) 如上所述提取变量,或者使用 引入变量对话框。 默认情况下,GoLand 会在就地模式下运行引入变量重构。 要使用 提取变量 对话框,请打开 设置 对话框(Ctrl+Alt+S ),转到 编辑器 | 代码编辑 ,并在 重构 区域中选择 在模态对话框中 选项。

引入常量

使用 引入常量重构可以将表达式替换为 常量。 该重构使得源代码更易于阅读和维护。 它还能帮助您避免使用没有说明其数值含义或用途的硬编码常量。

假设您的代码片段中包含硬编码的 Department name:

printName(): void { console.log("Department name: " + this.name); }

通过引入常量重构,您可以将硬编码的 Department name 替换为常量。 提取出的常量的作用域取决于其声明所在的上下文(位于封闭方法中、作为类的字段或位于任何类之外)。

示例 1:所引入的常量 departmentName 在封闭方法 printName() 中声明

printName(): void { console.log("Department name: " + this.name); }
printName(): void { const departmentName = "Department name: "; console.log(departmentName + this.name); }

示例 2:所引入的常量声明为封闭类 AccountingDepartment 的 _departmentName 字段

class AccountingDepartment extends Department implements ReportingDepartment { name: string; printName(): void { console.log("Department name: " + this.name); } }
class AccountingDepartment extends Department implements ReportingDepartment { name: string; private readonly _departmentName = "Department name: "; printName(): void { console.log(this._departmentName + this.name); } }

示例 3:所引入的常量 departmentName 被声明在所有类之外

class AccountingDepartment extends Department implements ReportingDepartment { name: string; printName(): void { console.log("Department name: " + this.name); } }
abstract class Department {...} const deparmentName = "Department name: "; class AccountingDepartment extends Department implements ReportingDepartment {...}

引入常量

  1. 在编辑器中,选择要转换为常量的表达式,按下 Ctrl+Alt+C 或从上下文菜单中选择 重构 | 引入常量

    或者,执行以下操作之一:

    • 按下 Ctrl+Alt+Shift+T ,然后选择 引入常量

    • 转到 重构 | 提取 | 常量

  2. 如果在当前插入点位置检测到多个表达式,请从 表达式 列表中选择所需的表达式。

  3. 选择新常量的作用域:

    • 局部常量 将在封闭方法中声明,详见 示例 1

    • 类字段 将在当前类中声明,详见 示例 2

    • 全局或模块常量 将声明在所有类之外,详见 示例 3

  4. 如果 GoLand 检测到表达式的多个出现位置,请选择是要替换所有位置,还是仅替换调用重构的位置。

  5. 通过双击列表中的名称接受一个建议的参数名,或在带红色标识的字段中指定自定义名称。 准备好后按 Enter

引入字段

引入字段重构会声明一个新字段,并使用所选表达式对其初始化。 原始表达式将被字段的使用替换。

假设您有如下代码:

class Rectangle { constructor(public height: number, public width: number) { this.height = height; this.width = width; } get area() { return this.calcArea(); } calcArea() { return this.height * this.width; } }

在下面的所有三个示例中,引入了相同的字段 _calcArea。 这些示例展示了初始化所引入字段的三种不同方式。

示例 1:所引入的字段 _calcArea 在封闭方法 get Area() 中初始化

class Rectangle { constructor(public height: number, public width: number) { this.height = height; this.width = width; } private _calcArea: number; get area() { this._calcArea = this.calcArea(); return this._calcArea; } calcArea() { return this.height * this.width; } }

示例 2:所引入的字段 _calcArea 在其声明中初始化

class Rectangle { constructor(public height: number, public width: number) { this.height = height; this.width = width; } private _calcArea = this.calcArea(); get area() { return this._calcArea; } calcArea() { return this.height * this.width; } }

示例 3:所引入的字段 _calcArea 在类的构造函数中初始化

class Rectangle { constructor(public height: number, public width: number) { this._calcArea = this.calcArea(); this.height = height; this.width = width; } private _calcArea: number; get area() { return this._calcArea; } calcArea() { return this.height * this.width; } }

引入字段

  1. 在编辑器中,选择要转换为常量的表达式,按下 Ctrl+Alt+F 或从上下文菜单中选择 重构 | 引入字段

    或者,执行以下操作之一:

    • 按下 Ctrl+Alt+Shift+T ,然后选择 引入字段

    • 转到 重构 | 提取 | 字段

  2. 如果 GoLand 检测到表达式的多个出现位置,请选择是要替换所有位置,还是仅替换调用重构的位置。

  3. 在弹出窗口中,选择新字段的初始化位置:

    • 当前方法 ,详见 示例 1

    • 字段声明 ,详见 示例 2

    • 构造函数 ,请参阅 示例 3。 请注意,如果从字段初始化器中调用重构,则此选项不可用。

    在 TypeScript 中提取字段:选择初始化方式
  4. 在字段声明或构造函数中进行初始化时,可以使用 readonly 修饰符引入新字段。 为此,请选择 设为只读 复选框。

  5. 选择字段可见性,可用选项为 公共私有受保护。 请参阅 TypeScript 官网 ,了解字段可见性修饰符。

  6. 双击列表中的建议参数名称之一以接受,或在红色背景字段中输入自定义名称。 准备就绪后,按下 Enter

选择重构模式

默认情况下,GoLand 直接在编辑器中(即原位模式)运行 Introduce Field 重构操作, 如上所述

要使用 Extract Field Dialog ,请打开 设置 对话框(Ctrl+Alt+S ),进入 编辑器 | 代码编辑 ,然后在 重构 区域中选择 在模态对话框中 选项。

提取方法

提取方法重构允许您使用提取代码创建具名方法或函数。 当调用 提取方法重构时,GoLand 会检测选定代码片段的输入变量和输出变量。 检测到的输出变量将用作提取出的方法或函数的返回值。

示例 1:从另一个方法中的表达式提取全局方法

在本示例中,从 let c = a + b; 表达式中提取了一个具有全局作用域的方法 NewMethod()。 提取出方法的参数来自 let c = a + b; 表达式。

示例 1.1:已生成函数声明

function MyFunction(a : number, b : number) { let c = a + b; let d = c * c; return d; }
function NewMethod(a: number, b: number) { let c = a + b; return c; } function MyFunction(a : number, b : number) { let c = NewMethod(a, b); let d = c * c; return d; }

示例 1.2:提取出的函数在表达式内部声明

function MyFunction(a : number, b : number) { let c = a + b; let d = c * c; return d; }
let NewMethod = function (a: number, b: number) { let c = a + b; return c; }; function MyFunction(a : number, b : number) { let c = NewMethod(a, b); let d = c * c; return d; }

示例 2:在封闭方法中声明提取的方法

在本示例中,从 let c = a + b; 表达式中提取了方法 NewMethod()。 已选择目标作用域 function MyFunction

function MyFunction(a : number, b : number) { let c = a + b; let d = c * c; return d; }
function MyFunction(a : number, b : number) { let NewMethod = function () { let c = a + b; return c; }; let c = NewMethod(); let d = c * c; return d; }

示例 3:从不属于任何方法的表达式中提取方法

从不属于任何方法的 var e = MyFunction(4, 6); 表达式中提取了方法 NewMethod()。 提取出的方法具有全局作用域。

var e = MyFunction(4, 6);
let NewMethod = function () { var e = MyFunction(4, 6); }; NewMethod();

提取函数

  1. 在编辑器中,选择要转换为函数的代码片段并按 Ctrl+Alt+M 或从上下文菜单中选择 重构 | 提取方法

    或者,执行下列操作之一:

    • Ctrl+Alt+Shift+T 并选择 提取方法

    • 转到 重构 | 提取 | 方法

  2. 如果所选表达式位于另一个函数中,请从列表中选择目标作用域:

    • 如果选择 global ,则提取的函数将在任何函数之外声明,请参阅上方的 示例 1

    • 若要在当前封闭函数中声明提取的函数,请选择 函数 <current enclosing function name> ,参阅上方的 示例 2

  3. 要打开包含更多选项的 提取函数提取函数 对话框,请再次按下 Ctrl+Alt+M。 在该对话框中,您可以选择是通过生成的 函数声明 声明提取的函数,还是 在表达式中 声明,并配置要作为参数传递的变量集。 请参阅 上方示例

默认打开“提取函数”对话框

  • 打开 设置 对话框(Ctrl+Alt+S ),转到 编辑器 | 代码编辑 ,然后在 重构 区域中选择 在模态对话框中 选项。

提取类型别名

使用此重构可将类型声明表达式转换为 类型别名 ,并使用该别名替换所有该表达式的出现位置。

假设您有如下代码片段,其中包含一个 { z: number } 类型声明:

function returnsObj(): { x : number, y : {z : number} } { return null } function anotherObjectReturned(): {x : number, y : {z : number} } { return null }

在下方示例中,从 { z: number } 类型声明中提取了一个类型别名 MyNewAlias

type MyNewAlias = { z : number }; function returnsObj(): { x : number, y : MyNewAlias } { return null } function anotherObjectReturned(): { x : number, y : MyNewAlias } { return null }

提取类型别名

  1. 在编辑器中,将插入符号置于要替换为类型别名的表达式中,并从上下文菜单中选择 重构 | 提取类型别名 或从主菜单中选择 重构 | 提取 | 类型别名

  2. 如果在当前位置检测到多个表达式,请从 表达式 列表中选择所需的表达式。

  3. 如果找到多个所选表达式的出现位置,请从 发现多个项 列表中选择 仅替换此项替换所有项

  4. 在字段中键入类型别名名称,准备就绪后按 Enter

提取超类

提取超类重构基于当前类的成员创建一个新的抽象类。 创建的抽象类将自动被扩展。

假设您有一个类 AccountingDepartment ,并且希望其 printName() 方法能够被复用。

class AccountingDepartment { name: string; printName(): void { console.log("Department name: " + this.name); } printMeeting(): void { console.log("The Accounting Department meets each Monday at 10 a.m"); } generateReports(): void { console.log("Generating accounting reports..."); } }

您可以提取一个超类 Department ,并将 printName 以及 Name 字段包含在其中。

class Department { name: string; printName(): void { console.log("Department name: " + this.name); } } class AccountingDepartment extends Department { printMeeting(): void { console.log("The Accounting Department meets each Monday at 10 a.m"); } generateReports(): void { console.log("Generating accounting reports..."); } }

提取超类

  1. 将插入符号置于要提取超类的类中任意位置。

  2. 从主菜单中选择 重构 | 提取 | 超类 ,或从上下文菜单中选择 重构 | 提取超类。 将打开 提取超类 对话框。

  3. 指定新超类的名称,并选中要包含在其中的类成员旁边的复选框。

  4. 目标文件 字段中,指定新类所在文件的位置。 默认情况下,该字段显示调用重构的当前文件的路径。

  5. 选择 提取超类。 GoLand 会创建新类,并使用 extends 标记源类。

    要创建超类并将方法参数中对源类的引用替换为对该超类的引用,请选择 提取超类并尽可能使用。 GoLand 会在 重构预览 面板中的 查找 工具窗口显示建议的更改。

提取接口

提取接口 重构会根据当前类的成员创建新接口。 创建的接口将自动实现。

假设您有一个类 AccountingDepartment ,并且预计其 generateReports() 方法将有其他实现。

abstract class Department { constructor(public name: string) { } printName(): void { console.log("Department name: " + this.name); } } class AccountingDepartment extends Department { constructor() { super("Accounting and Auditing"); } printMeeting(): void { console.log("The Accounting Department meets each Monday at 10 a.m"); } generateReports(): void { console.log("Generating accounting reports..."); } }

您可以提取一个 DepartmentInterface 接口,并在其中包含 generateReports()

abstract class Department { constructor(public name: string) { } printName(): void { console.log("Department name: " + this.name); } } interface DepartmentInterface { generateReports(): void; } class AccountingDepartment extends Department implements DepartmentInterface { constructor() { super("Accounting and Auditing"); } printMeeting(): void { console.log("The Accounting Department meets each Monday at 10 a.m"); } generateReports(): void { console.log("Generating accounting reports..."); } }

提取接口

  1. 将插入符号置于要提取接口的类中任意位置。

  2. 从主菜单中选择 重构 | 提取 | 接口 ,或从上下文菜单中选择 重构 | 提取接口。 将打开 提取接口 对话框。

  3. 指定新接口的名称,并选中要包含在其中的类成员旁边的复选框。

  4. 目标文件 字段中,指定新接口所在文件的位置。 默认情况下,该字段显示调用重构的当前文件的路径。

  5. 选择 提取接口。 GoLand 会创建新接口,并将源类标记为其实现。

    要创建接口并将方法参数中对源类的引用替换为对该接口的引用,请选择 提取接口并尽可能使用。 GoLand 会在 重构预览 面板中的 查找 工具窗口显示建议的更改。

引入对象或数组解构

解构允许您轻松地将数组或对象中的值解包到变量中。 此功能具有非常简洁的语法,通常用于在应用中传递数据。 有关更多信息,请参阅 TypeScript 官方网站

在 GoLand 中,您可以通过意图操作 Alt+Enter 调用解构功能。 使用 Replace with object/array destructuring 操作时,原始赋值将被删除。 要保留赋值,请使用 Introduce object/array destructuring

替换原始赋值语句

  1. 将插入符号置于数组或对象中的值上,并按 Alt+Enter 键。

  2. 从列表中选择 使用对象解构替换使用数组解构替换

    如果数组或对象中的某些值未被使用,这些元素将被跳过:

保留原始赋值语句

  1. 将插入符号置于数组或对象中的值上,并按 Alt+Enter 键。

  2. 从列表中选择 引入对象解构引入数组解构

为函数生成解构参数

  1. 将插入符号置于函数的参数上,并按 Alt+Enter 键。

  2. 从列表中选择 将参数转换为对象

内联重构

内联重构与 Extract refactorings 相对。

示例 1:内联变量

Inline Variable 重构将变量或常量的冗余用法替换为其初始值。 此重构类型仅适用于块作用域和函数作用域的变量。

function Multiplication(a : number, b : number) { let c = a + b; let d = (c) * (c); return d; }
function Multiplication(a : number, b : number) { let d = ((a + b)) * ((a + b)); return d; }

示例 2:内联方法

Inline Method/Inline Function 重构会将方法或函数体放入其调用方的主体中,并删除该方法或函数本身。

在以下示例中, Sum() 的方法体被放置在 Multiplication() 的方法体中。

function Sum(a: number, b: number) { return a + b; } function Multiplication(a: number, b: number) { let d = Sum(a, b) * Sum(a, b); return d; } var e = Multiplication(4, 6);
function Multiplication(a : number, b : number) { let d = (a + b) * (a + b); return d; } var e = Multiplication(4, 6);

运行内联重构

  1. 在编辑器中,将插入符号置于要内联的符号上,然后按 Ctrl+Alt+N ,或从上下文菜单或主菜单中选择 重构 | 内联

更改签名重构

使用 Change Signature 重构可以更改函数名称、可见性及返回类型,添加、移除、重新排序及重命名参数,并在调用层级中传播新参数。

您还可以使用 Introduce Parameter 重构添加参数。

在以下示例中,函数 eat() 被重命名为 feed() ,并引入了一个新参数 isMammal 类型为 boolean

class Animal { constructor(age: number, name: string){ } eat(food: string[]): void { } } let Max = new Animal(23, 'Max'); Max.eat(['Apple', 'Parsley']); let Daisy = new Animal(12, 'Daisy'); Daisy.eat(['Pork', 'Fish']);
class Animal { constructor(age: number, name: string){ } feed(food: string[], isMammal: boolean = true): void { } } let Max = new Animal(23, 'Max'); Max.feed(['Apple', 'Parsley'], false); let Daisy = new Animal(12, 'Daisy'); Daisy.feed(['Pork', 'Fish'], false);

调用更改签名

  • 在编辑器中,将插入符号置于要重构的函数名称中,然后按 Ctrl+F6 ,或从上下文菜单或主菜单中选择 重构 | 更改签名。 将打开 更改签名 对话框。

重命名函数

  • 更改签名 对话框 Ctrl+F6 中,编辑 名称 字段。

更改函数的返回类型

  • 返回类型 字段中,指定函数返回值的类型。 如果该字段为空,则返回类型视为 void。 在 TypeScript 官方网站了解有关返回类型的更多信息。

更改函数的可见性

管理函数参数

  • 更改签名 对话框 Ctrl+F6 中,使用参数表以及右侧的按钮:

    • 要添加参数,请单击 添加按钮 &#xa0; Alt+Insert ,并指定新参数的名称及其类型。 指定参数的默认值,或通过函数调用传递的值。

      如有必要, 将新参数传播至调用当前函数的函数中。

    • 要移除参数,请单击对应行中的任意单元格,然后单击 删除按钮 &#xa0; Alt+Delete

    • 要重新排序参数,使必需参数列在可选参数之前,请使用 上移按钮 &#xa0; Alt+Up下移按钮 &#xa0; Alt+Down。 在 TypeScript 官方网站了解有关必需和可选参数的更多信息。

    • 要重命名参数,请编辑 名称 字段。

沿调用层级传播参数

  1. 更改签名 对话框 Ctrl+F6 中,选择参数并单击 传播按钮。 将打开 选择要传播新参数的方法 对话框。 左侧窗格显示函数调用的层级结构。 选择函数时,右侧窗格会分别在 调用方方法被调用方方法 字段中显示该函数的代码以及其调用的函数的代码。

  2. 在左侧窗格中,选中您希望传播参数的函数旁的复选框,然后单击 确定

预览更改并完成重构

  1. 更改签名 对话框 Ctrl+F6 中,单击 预览

  2. 重构预览 选项卡的 查找工具窗口中, 查看预期更改 ,根据需要进行调整,准备就绪后单击 执行重构

将默认导出转换为具名导出

对于类、函数、常量变量、字符串、对象和类型,您可以将 export default 语句替换为具名 export 语句,并自动更新相应的 import 语句。

如果符号被重新导出,相应的 export 语句也会被更新。

此重构可从 export defaultimport 语句中调用。

  • 将光标置于 export default 语句处,或置于要导出的名称处,按下 Alt+Enter ,然后选择 将默认导出转换为具名导出。 要切换预览,请按 Ctrl+Q

    从 export 语句调用默认导出的转换
  • import 语句中,将光标置于导入项的名称上,按下 Alt+Enter ,然后选择 将默认导出转换为具名导出。 预览(Ctrl+Q )会显示 import 语句将如何更新。

    从 import 语句调用默认导出的转换

将具名导出转换为默认导出

对于类、函数、常量变量、字符串、对象和类型,您可以将具名 export 语句替换为 export default 语句,并自动更新相应的 import 语句。

此重构可从 export defaultimport 语句中调用。

  • 将光标置于 export 语句中的导出名称上,按下 Alt+Enter ,然后选择 将具名导出转换为默认导出。 要切换预览,请按 Ctrl+Q

    从 export 语句将具名导出转换为默认导出
  • import 语句中,将光标置于导入项的名称上,按下 Alt+Enter ,然后选择 将具名导出转换为默认导出。 预览(Ctrl+Q )会显示 import 语句将如何更新。

    从 export 语句将具名导出转换为默认导出
最后修改日期: 2025年 9月 26日