gpt4 book ai didi

javascript - Typescript 成员函数返回另一个函数

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

我有课

import {Request, Response, Router} from 'express';
import {IAccessTokenMiddleWare} from "./IAccessTokenMiddleWare";

class AccessTokenMiddleWare implements IAccessTokenMiddleWare {


private jwtToken: string;
constructor() {

this.jwtToken = "";
}
public init() : any {

return function (req: Request, res: Response, next: any) {

this.addJwtToReqBody(req);
}
}

private addJwtToReqBody(req) {

console.log("ADDED...")
}
}

export {AccessTokenMiddleWare}

我像下面这样调用它

var accessTokenMiddleWare = new AccessTokenMiddleWare();
router.use(accessTokenMiddleWare.init());

获取错误

error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.

我该如何解决这个错误?

最佳答案

Typescript(和 JavaScript)中的函数没有固定的 this,因此 this 由调用者决定。您返回的函数可以用任何 this 对象调用,因此编译器假定 this 默认为 any,如果您使用 strict< 会导致错误:

accessTokenMiddleWare.init().call({ newThis: true });

如果你想从声明的上下文中捕获 this,你应该使用一个箭头函数,它将 this 作为当前类:

class AccessTokenMiddleWare implements IAccessTokenMiddleWare {


private jwtToken: string;
constructor() {

this.jwtToken = "";
}
public init() {

return (req: Request, res: Response, next: any) => {

this.addJwtToReqBody(req);
}
}

private addJwtToReqBody(req: Request) {

console.log("ADDED...")
}
}

注意 我还从 init 中删除了类型注释,您可以让编译器推断返回将是一个函数并获得更好的类型检查。您也可以手动指定它:init(): (req: Request, res: Response, next: any) => void

关于javascript - Typescript 成员函数返回另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49850483/

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