我正在尝试创建属性装饰器,它接受一个属性键和一个函数,该函数接受该键的值并返回装饰器所在的属性。
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 上找到了这篇文章,想知道是否有人知道如何针对当前情况修改它:https://github.com/microsoft/TypeScript/issues/17795#issuecomment-324368400;
到目前为止我所得到的是:
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....
}
}
但是好像不行。有任何想法吗?基本上,不是验证属性是否具有相同的类型,我想验证它们是否与函数参数类型匹配(输入应与作为参数传递的属性相匹配,而装饰器应用于的属性应与返回值相匹配类型)