Javascript 自动重命名非点表示法属性名称
在VisualStudio(或其他常见的javascript/typescript IDE)中,是否有一种简单的方法可以重命名类中的属性,并在代码中其他不使用点表示法的位置自动重命名它们 例如,当使用括号符号Javascript 自动重命名非点表示法属性名称,javascript,typescript,ide,refactoring,Javascript,Typescript,Ide,Refactoring,在VisualStudio(或其他常见的javascript/typescript IDE)中,是否有一种简单的方法可以重命名类中的属性,并在代码中其他不使用点表示法的位置自动重命名它们 例如,当使用括号符号obj[“prop”]而不是obj.prop访问属性时,或出于某种原因列出属性名称子集时,会出现此问题: class C { constructor( public name: string, public age: number, public id: stri
obj[“prop”]
而不是obj.prop
访问属性时,或出于某种原因列出属性名称子集时,会出现此问题:
class C {
constructor(
public name: string,
public age: number,
public id: string
){}
};
let obj = new C("bob", 30, "abcdef");
let interesting = ["name", "age"];
console.log(`${interesting[0]}: ${obj[interesting[0]]}, ${interesting[1]}: ${obj[interesting[1]]}`);
我不知道有什么好方法可以将这些字符串与属性名关联(除了将字符串键入keyof C
,这至少会在重命名后导致编译器错误)或者足够聪明的IDEs来理解这种关系
有一个奇妙的想法,就是将所有内容转换为点表示法,即转换一个只包含对字符串的属性访问的未使用语句的伪函数,并对其进行解析。然后,通用IDE也会将其重命名。但是,这引入了应用程序本身完全不需要的代码,除非非常小心地编写,否则不会非常健壮,例如Function.toString
除了手动执行大部分操作外,没有其他切实可行的方法吗?如果您用存储属性名的变量替换硬编码字符串,这是可能的
请不要将您的类格式化为一行程序。很难读,这是不可能的。IDE不是Human。它可以检测字符串何时包含字符串以及何时包含属性名。若你们已经定义了接口,为什么不通过点访问它呢?在JavaScript中通过对象上的字符串索引访问属性简直就是地狱。我想这是不可能的。除非有办法告诉IDE字符串所指的属性(可能是通过typescript类型),否则无论如何都是毫无希望的。
var person = {};
person.firstname = 'Jack';
person.address = "123 Street";
function getPropertyName(obj, expression) {
var res = {};
Object.keys(obj).map(k => { res[k] = () => k; });
return expression(res)();
}
let propertyName = getPropertyName(person, o => o.address);
console.log(propertyName); // Output: 'address'