Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 具有参数类型安全键的装饰器_Typescript - Fatal编程技术网

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)=>{ //行动。。。。 } } 但它似乎不起作用。有什么想法吗?基本上,我不想验证属性是否具有相同的类型,而是想验证它们是否与函数参数类型匹配(输入应该与作为参数传递的属性匹配,而应用装饰器的属性应该与返回值类型匹配)