类型检查方法装饰器工厂

时间:2019-07-18 02:06:04

标签: typescript

这是decorator example in the typescript website

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }

    @enumerable(false)
    greet() {
        return "Hello, " + this.greeting;
    }
}

function enumerable(value: boolean) {
    return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
        descriptor.enumerable = value;
    };
}

如您所见,装饰器工厂返回一个函数,该函数接受目标键和属性键以获取方法属性。

现在,我想创建一个接受方法的装饰器并进行类型检查,以确保传递的方法和方法属性具有相同的类型:

const auxMethod = (str: string) => 'a';
class Greeter {
    @myMethod(auxMethod)
    greet(str: string) {
        return "Hello, " + str;
    }
}

您可以看到auxMethod和greet具有相同的类型。可以在打字稿中键入检查吗?

如果装饰器通过内部装饰器工厂中的实际方法,那么使用泛型将很简单:

function myMethod<T> (handler: T) {
    return function (target: T) {
    };
}

但是由于target和propertyKey是动态的,所以不能。

0 个答案:

没有答案