0

Passport.js 策略可以支持验证调用中的其他选项:

    passport.authenticate('azuread-openidconnect', {
      // Default passport options
      failWithError: true,
      successReturnToOrRedirect: '/',
      // Custom option supported by the azure-ad plugin
      // Type error - 'tenantIdOrName' does not exist in type 'AuthenticateOptions'
      tenantIdOrName: 'common',
    });

使用自定义策略支持的选项(例如tenantIdOrName上面)会导致打字稿错误,因为它不是 此处找到AuthenticateOptions的护照界面的一部分并在此处的签名中使用authenticate

我尝试了一些没有成功的事情

  • 模块扩充,即declare module 'passport' {...}似乎覆盖了模块的类型而不是扩展它们(不在我的扩展中的任何东西都被视为无类型)
  • 合并接口即declare namespace passport { interface AuthenticateOptions { ...new properties }},这似乎对authenticate方法签名没有影响。

如何在authenticate没有类型转换的情况下支持调用中的其他属性?

4

1 回答 1

0

结果我需要为我的模块扩充导入现有模块以扩展模块的类型。

.d.ts 文件中的以下内容*成功扩展了AuthenticateOptions接口:

import { AuthenticateOptions } from 'passport';

declare module 'passport' {
  // Extend acceptable authenticate options for Passport Azure AD
  // https://github.com/AzureAD/passport-azure-ad#513-options-available-for-passportauthenticate
  interface AuthenticateOptions {
    customState?: string;
    resourceURL?: string;
    tenantIdOrName?: string;
    domain_hint?: string;
    login_hint?: string;
    prompt?: string;
  }
}

*我发现文件不能命名passport.d.ts,任何其他名称都可以

于 2019-11-04T20:23:07.410 回答