#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