Как расширить интерфейс модуля authenticateOptions passport.js - PullRequest
0 голосов
/ 04 ноября 2019

Стратегии Passport.js могут поддерживать дополнительные параметры в вызове authenticate:

    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 без приведения типов?

1 Ответ

0 голосов
/ 04 ноября 2019

Оказывается, мне нужно было импортировать существующий модуль для расширения моего модуля, чтобы расширить типы модулей.

Следующее в файле .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, любое другое имя работало нормально

...