Typescript 具有参数类型安全键的装饰器
我试图创建一个属性装饰器,它接受一个属性键和一个函数,该函数接受该键的值并返回装饰器所在的属性Typescript 具有参数类型安全键的装饰器,typescript,Typescript,我试图创建一个属性装饰器,它接受一个属性键和一个函数,该函数接受该键的值并返回装饰器所在的属性 class Example { foo: string; // Should work @decorator('foo', (val: string) => !!val) bar: boolean; // Should error @decorator('foo', (val: string) => 'string')
class Example {
foo: string;
// Should work
@decorator('foo', (val: string) => !!val)
bar: boolean;
// Should error
@decorator('foo', (val: string) => 'string')
bar1: boolean;
// Should error
@decorator('foo', (val: boolean) => !!val)
bar2: boolean;
// Should error
@decorator('doesntExist', (val: any) => !!val)
bar3: boolean;
}
我在github上找到了这篇文章,想知道是否有人知道如何针对当前的情况修改这篇文章:
到目前为止,我得到的是:
export function decorator<CK extends string, V, R>(property: CK, callback: (val: V) => R) {
return <
T extends {} & { [P in CK]: V } & { [P in K]: R },
K extends keyof T>(
proto: T,
propertyKey: K) => {
// Operations....
}
}
导出函数装饰器(属性:CK,回调:(val:V)=>R){
返回<
T扩展了{}&{[P in CK]:V}&{[P in K]:R},
K/T>(
原型:T,
propertyKey:K)=>{
//行动。。。。
}
}
但它似乎不起作用。有什么想法吗?基本上,我不想验证属性是否具有相同的类型,而是想验证它们是否与函数参数类型匹配(输入应该与作为参数传递的属性匹配,而应用装饰器的属性应该与返回值类型匹配)