node.js - Passport 認證在 Typescript express 應用中不返回與 express 相容的類型
我正在嘗試在我的 Typescript Express 應用中使用 passport.authenticate 作為中介軟體函數:
router.get('/spotify', passport.authenticate('spotify'))passport.authenticate 在這裡返回的是 Typescript 的 'any' 類型,可能是為了保證與多個 HTTP 服務框架的兼容性。然而,在調試時,函數簽名與 Express 使用的 RequestHandler 定義相匹配。
因為 authenticate 返回的是 'any' 類型,typescript-eslint 會報錯(no-unsafe-argument),因為我將一個 'any' 變量賦值給 RequestHandler 參數。這可以通過將 authenticate 的類型斷言為 RequestHandler 來避免。但據我所知,類型斷言是一種不好的做法。
我嘗試過類型縮小,但據我所知,將 'any' 變量縮小為函數類型是不可能的。
唯一的其他方法是否是使用包含在 Authenticator 介面中的框架方法?對於看似簡單的任務,這似乎複雜得多。
答案#1
我也遇到過這個問題,而對我有效的方法是強制指定 RequestHandler 類型。所以要將這應用到你的程式碼中,那將是
import { RequestHandler} from 'express';
router.get(
'/spotify',
passport.authenticate('spotify') as RequestHandler
);
