在 JavaScript 或 TypeScript 中重命名时,阻止 VS Code 在解构赋值中添加“as”或别名

Mat*_*ner 8 javascript typescript visual-studio-code

当我在 JavaScript 或 TypeScript 中重命名变量时,VS Code 有时会在解构赋值中添加别名:

const { renamedProp: prop } = arg; // After rename
Run Code Online (Sandbox Code Playgroud)

或者它添加as了进口:

import { Foo as renamedFoo } from "./file"; // After rename
Run Code Online (Sandbox Code Playgroud)

为什么 VS Code 会这样做,我该如何禁用这种行为?例如,如果我prop在界面中重命名Foo以下代码:

export interface Foo {
    prop: string;
}

function bar(arg: Foo) {
    const { prop } = arg;
    return prop;
}
Run Code Online (Sandbox Code Playgroud)

VS Code 将代码更改为:

export interface Foo {
    renamedProp: string;
}

function bar(arg: Foo) {
    const { renamedProp: prop } = arg;
    return prop;
}
Run Code Online (Sandbox Code Playgroud)

我希望它是:

export interface Foo {
    renamedProp: string;
}

function bar(arg: Foo) {
    const { renamedProp } = arg;
    return renamedProp;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ner 5

默认情况下,VS Code 会尝试使重命名安全。这意味着保留现有的类型接口。在以下示例中,

export interface Foo {
    prop: string; 
}

function bar(arg: Foo) {
    const { prop } = arg; 
    return { prop };
}
Run Code Online (Sandbox Code Playgroud)

如果我们重命名prop而不使用别名,隐式返回的类型bar将会改变。也许这种类型是用来满足另一个需要名为prop. 在这种情况下,在重命名时引入别名会保留现有的类型接口,从而确保代码继续按预期编译和工作

要禁用此行为,只需设置:

"javascript.preferences.useAliasesForRenames": false,
"typescript.preferences.useAliasesForRenames": false,
Run Code Online (Sandbox Code Playgroud)

只有在工作区中使用 TypeScript 3.4+ 时才支持这些设置(这是 VS Code 1.33+ 中的默认设置)