You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript报错:Passport实例赋值给Authenticator时'this'类型不兼容

问题原因

这个TypeScript报错是@types/passport的类型定义特性导致的:Authenticator接口内的use等方法声明返回值为this类型,允许子类继承Authenticator时返回子类型实例。你直接将new Passport()生成的实例显式标注为Authenticator类型时,TS无法确定实例的this上下文和通用Authenticator接口的this兼容,就会抛出类型不匹配的错误。

解决方案

方案1:省略显式类型标注(最推荐)

new Passport()返回的实例本身类型是TS可以自动推导的,不需要强行标注为Authenticator,直接写即可:

import { Passport } from 'passport';

const alternativePassport = new Passport();

方案2:显式标注为Passport实例类型

如果需要保留显式类型声明,使用Passport类型或者InstanceType取构造函数的实例类型即可:

import { Passport } from 'passport';

// 写法1
const alternativePassport: Passport = new Passport();

// 写法2
const alternativePassport: InstanceType<typeof Passport> = new Passport();

方案3:适配接收可选passport参数的函数

针对你的业务场景,函数参数直接用Passport类型,默认值赋值为passport.default即可同时兼容默认实例和自定义实例:

import passport, { Passport } from 'passport';

// 自定义函数的类型定义
function handleAuth(customPassport: Passport = passport.default) {
  // 业务逻辑
}

// 调用时可以传自己生成的实例,也可以不传用默认值
handleAuth(alternativePassport);
handleAuth();

兜底方案:类型断言

如果以上方案都不满足你的特殊场景,可通过类型断言强制兼容,不到万不得已不推荐使用:

import { Passport, Authenticator } from 'passport';

const alternativePassport = new Passport() as unknown as Authenticator;

内容的提问来源于stack exchange,提问作者Max Gordon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:09:05