Запретить VS Code добавлять ‘as’ или псевдоним в деструктурированное присвоение при переименовании в JavaScript или TypeScript

#javascript #typescript #visual-studio-code

#javascript #typescript #visual-studio-code

Вопрос:

Когда я переименовываю переменную в 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;
}
  

Ответ №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 )

Комментарии:

1. Параметр ‘typescript.preferences.renameShorthandProperties’ устарел в пользу ‘typescript.preferences.useAliasesForRenames’. Итак, теперь вы должны использовать следующие настройки в Preferences:Configure Language Specific Settings -> "typescript.preferences.useAliasesForRenames": false, "javascript.preferences.useAliasesForRenames": false