当我在JavaScript或TypeScript中重命名变量时,VS Code有时会在析构化的赋值中添加别名:
const { renamedProp: prop } = arg; // After rename
或者它在进口中添加as
:
import { Foo as renamedFoo } from "./file"; // After rename
为什么VS Code会这样做?如何禁用此行为?例如,如果我在接口prop
中重命名Foo
以获取以下代码:
export interface Foo {
prop: string;
}
function bar(arg: Foo) {
const { prop } = arg;
return prop;
}
VS Code将代码更改为:
export interface Foo {
renamedProp: string;
}
function bar(arg: Foo) {
const { renamedProp: prop } = arg;
return prop;
}
我希望它是:
export interface Foo {
renamedProp: string;
}
function bar(arg: Foo) {
const { renamedProp } = arg;
return renamedProp;
}
默认情况下,VS Code尝试使重命名安全。这意味着保留现有的类型接口。在以下示例中,
export interface Foo {
prop: string;
}
function bar(arg: Foo) {
const { prop } = arg;
return { prop };
}
如果我们在不使用别名的情况下重命名prop
,隐式返回的bar
类型将会改变。也许这种类型用于满足另一个需要名为prop
的属性的接口。在这种情况下,在重命名上引入别名会保留现有的类型接口,这样可以确保代码继续编译并按预期工作
要禁用此行为,只需设置:
"javascript.preferences.renameShorthandProperties": false,
"typescript.preferences.renameShorthandProperties": false,
只有在工作区中使用TypeScript 3.4+时才支持这些设置(这是VS Code 1.33中的默认设置)