クラスがあります
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());
エラーが発生する
エラーTS2683: 'this'には型注釈がないため、暗黙的に型 'any'があります。
このエラーを解決するにはどうすればよいですか?
Typescript(およびJavaScript)の関数には固定がないthis
ためthis
、呼び出し元によって決定されます。返される関数は任意のthis
オブジェクトで呼び出すことができるため、コンパイラはthis
デフォルトで任意であると想定し、次を使用するとエラーが発生しますstrict
。
accessTokenMiddleWare.init().call({ newThis: true });
宣言コンテキストからこれをキャプチャする場合は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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加