Javascript &引用;“计算财产名称”;用于typescript中的getter和setter
Javascript具有相同的语法Javascript &引用;“计算财产名称”;用于typescript中的getter和setter,javascript,typescript,Javascript,Typescript,Javascript具有相同的语法 class C { get [prop]() { ... } set [prop](v) { ... } } 用于获取或设置任意属性 在Typescript中有什么方法可以做到这一点吗?您的示例代码实际上并没有完成您想要做的事情,即使是在JavaScript中。通过计算表达式得出属性名称。例如: const computed = { ["foo".toUpperCase()]: "bar" } co
class C {
get [prop]() { ... }
set [prop](v) { ... }
}
用于获取或设置任意属性
在Typescript中有什么方法可以做到这一点吗?您的示例代码实际上并没有完成您想要做的事情,即使是在JavaScript中。通过计算表达式得出属性名称。例如:
const computed = {
["foo".toUpperCase()]: "bar"
}
console.log(computed.FOO) // bar
除非prop
已经是一个现有变量,否则将prop
用作计算属性将失败。每个计算属性将仅用作单个属性,而不是所有可能的属性
我认为在JavaScript(因此在TypeScript中)中拦截所有属性get和set的唯一方法是使用。下面是一个可能的实现:
class C {
[k: string]: any;
constructor() {
return new Proxy<C>(this, {
get(thiz, prop) {
console.log(`getting ${String(prop)}`);
},
set(thiz, prop, v) {
console.log(`setting ${String(prop)} to ${v}`);
return true; }
});
}
}
注意:我建议您在生产环境中使用任何类似于上面的代码之前都要非常小心并进行测试;在类构造函数中返回自定义对象,或者使用特定的代理
处理程序,可能会涉及到一些边缘情况
JavaScript是TypeScript。您的代码按原样工作..是否满足您的需要?这些属性有多“任意”?你能制作一个合适的IDE,让其他人可以用它来为自己演示这个问题吗?@jcalz我的意思是我想在getter或setter中使用变量
prop
。喜欢还是不喜欢?如果不是,那么请在您的问题中详细说明,让某人可以在他们的IDE中查看。现在我必须猜测你是如何定义prop
的,以及你是如何使用它的。
const c = new C();
c.foo; // getting foo
c.foo = "bar"; // setting foo to bar