Вопрос или проблема
Я использую typescript 5.6 (“typescript”: “~5.6”)
Когда я пытаюсь использовать WebAuth, я обнаружил, что navigator.credentials.create
возвращает Promise<Credential | null>
Но на MDN я считаю, что это должно быть PublicKeyCredential (хотя он наследуется от Credential)
navigator.credentials.create
довольно гибкий и позволяет создавать несколько типов учетных данных, не только PublicKeyCredential
, но также FederatedCredential
и PasswordCredential
. Все это зависит от типа опций, которые вы отправляете с вашим запросом.
Как вы говорите в вопросе, PublicKeyCredential
наследуется от Credential
, так что PublicKeyCredential
всегда является Credential, даже если Credential не всегда может быть PublicKeyCredential
. Но если вы отправляете PublicKeyCredentialCreationOption
в navigator.credentials.create
, вы можете ожидать, что Credential
, который вы получите в ответ, будет PublicKeyCredential
или NULL.
Смотрите документацию по методу create() для получения дополнительной информации
Ответ или решение
Метод navigator.credentials.create
возвращает Promise<Credential | null>
, поскольку он является частью более широкой API для работы с разными типами учетных данных, включая PasswordCredential
, FederatedCredential
и PublicKeyCredential
. Хотя PublicKeyCredential
наследуется от Credential
, это не означает, что метод ограничивается только возвращением PublicKeyCredential
.
Основная причина, по которой возвращаемое значение объявляется как Credential
, заключается в гибкости navigator.credentials.create
. Этот метод может создавать разные типы учетных данных в зависимости от параметров, переданных в запросе. Например, если вы передаете параметры для создания FederatedCredential
или PasswordCredential
, возвращаемый результат будет являться соответствующим типом учетных данных.
Когда вы передаете PublicKeyCredentialCreationOptions
в navigator.credentials.create
, ожидается, что возвращаемое значение будет PublicKeyCredential
, если процесс создания прошел успешно. Если по какой-то причине создание не удалось, метод вернет null
.
Таким образом, определение возвращаемого значения как Credential
обеспечивает согласованность с многообразием типов учетных данных, которые могут быть созданы через этот метод. Вы можете использовать оператор instanceof
для проверки фактического типа учетных данных, например:
const credential = await navigator.credentials.create({ /* ваши параметры */ });
if (credential instanceof PublicKeyCredential) {
// Успешно получен PublicKeyCredential
} else {
// credentials не является PublicKeyCredential, обработайте это
}
Для более подробной информации рекомендуем обратиться к документации, например, к странице MDN по create().
Таким образом, возвращаемый тип Credential
служит для обозначения того, что navigator.credentials.create
способен вернуть несколько типов учетных данных, и лишь в случае успешного создания PublicKeyCredential
вы сможете использовать его как таковой.