向TypeScript中的函数添加动态getter/setter属性
我正在尝试向函数添加getter/setter属性,TypeScript在尝试访问该属性之前不会抱怨向TypeScript中的函数添加动态getter/setter属性,typescript,Typescript,我正在尝试向函数添加getter/setter属性,TypeScript在尝试访问该属性之前不会抱怨 const obj:{[key:string]:string} = { blah: "ok", test: "yes" }; const func = (a:string):void => {}; for(const key in obj) { Object.defineProperty(func, key, { get()
const obj:{[key:string]:string} = {
blah: "ok",
test: "yes"
};
const func = (a:string):void => {};
for(const key in obj)
{
Object.defineProperty(func, key, {
get() { return obj[key]},
set(a:string) {
obj[key] = a;
}
});
}
console.log([func]); //good, shows function and new properties
console.log(func.blah); //error TS2339: Property 'blah' does not exist on type '(a: string) => void'.
我试图避免使用“any”和属性名作为类型声明
有什么提示吗?您需要使用
as
将func
的类型声明为包含要添加的属性的内容
带有来自obj
的索引签名:
const func = ((a:string) => {}) as ((a:string) => void) & {[key:string]:string};
const func = ((a:string) => {}) as ((a:string) => void) & typeof obj;
使用来自obj的类型的动态类型
:
const func = ((a:string) => {}) as ((a:string) => void) & {[key:string]:string};
const func = ((a:string) => {}) as ((a:string) => void) & typeof obj;
使用一些特定的属性集(可以是blah
和test
而不是任何string
):
obj
被定义为{[key:string]:string}
--我们只允许访问已知属性func.blah
和func.test
,还是要访问任何属性?基本上,您需要在添加属性之前声明func
的类型:const func=((a:string)=>{})as((a:string)=>void)&{[key:string]:string}代码>谢谢。成功了。你能把它作为一个解决方案发布,这样我就可以投票了吗?很好的头像‘‘‘‘‘‘)