gpt4 book ai didi

javascript - 从另一个文件导入时无法解析 Typescript 装饰器的签名

转载 作者:行者123 更新时间:2023-11-30 15:08:34 25 4
gpt4 key购买 nike

鉴于以下情况:

装饰器.ts

export function logStuff(target: Object, key: string | symbol, descriptor: TypedPropertyDescriptor<any>) {
return {
value: function (...args: any[]) {
args.push("Another argument pushed");
descriptor.value.apply(target, args);
}
};
}

Shell.ts

// Removed other imports for brevity
import logStuff = require("utils/log-decorator");

class Shell extends AnotherClass {
constructor() {
super();
this.fooMethod("arg1");
}

@logStuff
private fooMethod(arg1: string, arg2?: string) {
console.log(`Arguments from original function: ${JSON.stringify(arguments)}`);
}
}

export = Shell;

我收到此消息(为简洁起见缩短了文件路径):

Unable to resolve signature of method decorator when called as an expression. Cannot invoke an expression whose type lacks a call signature. Type 'typeof "/utils/log-decorator"' has no compatible call signatures

但是,如果我将函数移动到 Shell.ts 的顶部,它编译时不会出错。关于如何处理这个问题有什么建议吗?

最佳答案

您的 logStuff 可作为模块的导出成员使用。所以你必须像这样访问它:

import logStuffModule = require("utils/log-decorator");
//...
@logStuffModule.logStuff
private fooMethod(arg1: string, arg2?: string) { ... }

或者使用 ES6 风格的导入:

import { logStuff }  from "utils/log-decorator";

// ...
@logStuff
private fooMethod(arg1: string, arg2?: string) { ... }


或者您可以通过将导出对象设置为您的函数来修改您的模块,并像您现在使用它的方式一样使用它:

// decorator.ts
export = function logStuff() {}

// Shell.ts
import logStuff = require("utils/log-decorator");

// ...
@logStuff
private fooMethod(arg1: string, arg2?: string) { ... }

关于javascript - 从另一个文件导入时无法解析 Typescript 装饰器的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45413086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com