【问题标题】:Stop VS Code from adding 'as' or alias in destructured assignment when renaming in JavaScript or TypeScript在 JavaScript 或 TypeScript 中重命名时,阻止 VS Code 在解构赋值中添加“as”或别名
【发布时间】:2019-08-09 13:30:46
【问题描述】:

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

const { renamedProp: prop } = arg; // After rename

或者在导入中添加as

import { Foo as renamedFoo } from "./file"; // After rename

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

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;
}

【问题讨论】:

    标签: javascript typescript visual-studio-code


    【解决方案1】:

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

    export interface Foo {
        prop: string; 
    }
    
    function bar(arg: Foo) {
        const { prop } = arg; 
        return { prop };
    }
    

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

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

    "javascript.preferences.useAliasesForRenames": false,
    "typescript.preferences.useAliasesForRenames": false,
    

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

    【讨论】:

    • “typescript.preferences.renameShorthandProperties”设置已被弃用,取而代之的是“typescript.preferences.useAliasesForRenames”。所以,现在你应该在Preferences:Configure Language Specific Settings -> "typescript.preferences.useAliasesForRenames": false, "javascript.preferences.useAliasesForRenames": false 中使用以下设置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多