Проблема с типизацией шрифтов Web OTP API - Отсутствие типов в TypeScript - PullRequest
0 голосов
/ 24 апреля 2020

Я следую инструкциям, доступным на https://web.dev/web-otp/ для реализации Web OTP API в моем приложении Angular. Но при добавлении кода ниже он выдает ошибку:

const content = await window.navigator['credentials'].get({
        otp: { transport: ['sms'] },
        signal: abortController.signal
      });

Вот сообщение об ошибке:

Error   TS2769  (TS) No overload matches this call.
  Overload 1 of 2, '(options?: CredentialRequestOptions): Promise<CredentialType>', gave the following error.
    Argument of type '{ otp: { transport: string[]; }; signal: AbortSignal; }' is not assignable to parameter of type 'CredentialRequestOptions'.
      Object literal may only specify known properties, and 'otp' does not exist in type 'CredentialRequestOptions'.
  Overload 2 of 2, '(options?: CredentialRequestOptions): Promise<Credential>', gave the following error.
    Argument of type '{ otp: { transport: string[]; }; signal: AbortSignal; }' is not assignable to parameter of type 'CredentialRequestOptions'.
      Object literal may only specify known properties, and 'otp' does not exist in type 'CredentialRequestOptions'.

Я добавил @types/webappsec-credential-management, но я считаю, что он еще не обновлен для поддержки otp.

Есть ли обходной путь?

1 Ответ

0 голосов
/ 25 апреля 2020

Вот как я решил проблему:

Создал новую папку с именем typings и добавил ее к typeRoots в tsconfig.json

"typeRoots": [
      "typings",
      "node_modules/@types"
    ],

Создал новый файл polyfills.d.ts в папке typings и добавленное ниже содержимое в файл:

interface CredentialRequestOptions {
  otp: OTPOptions;
}

interface OTPOptions {
  transport: string[];
}

Если вам интересно, почему я не добавил другие свойства интерфейса, это потому, что у меня уже есть:

"types": [
      "@types/webappsec-credential-management"
    ]

И "@types/webappsec-credential-management": "^0.5.1", в packages.json.

Поддержка OTP еще не добавлена, и для устранения отсутствующего свойства otp я воспользовался функцией TypeScript Объявление Слияние , теперь компилятор TypeScript объединяет эти два отдельных объявления (одно определено в node_modules/@types и другое в typings), объявленных с тем же именем, в одно определение.

Для дальнейшего чтения: https://justintimecoder.com/how-to-polyfil-missing-types-in-typescript/

...