当装饰器更改其返回类型时,如何让 TypeScript 推断装饰方法的类型?
在下面的基本示例中,我装饰一个方法以返回字符串化对象:
function jsonStringify() {
return function (target, decoratedFnName: string, descriptor: PropertyDescriptor) {
let decoratedFn = descriptor.value;
let newFn = function () {
let object = decoratedFn.apply(target, arguments);
return JSON.stringify(object);
};
descriptor.value = newFn;
return descriptor;
}
}
class Decorated {
@jsonStringify()
method(name: string, description: string) {
return {
name: name,
description: description
}
}
};
let stringifiedObject = new Decorated().method('Test Name', 'Test Description');
console.log(stringifiedObject.includes('Test Name'));
Run Code Online (Sandbox Code Playgroud)
如果我在 tsconfig.json 中转译 TypeScript "noEmitOnError": false,那么代码将完美运行并在控制台中记录 true。然而,tsc 抱怨错误:
error TS2339: Property …Run Code Online (Sandbox Code Playgroud)