Когда возвращаемое значение функции может быть разных типов (используя |), как я могу выбрать его в TypeScript? - PullRequest
0 голосов
/ 06 октября 2018

Я создаю приложение, используя React Native с TypeScript.Я пишу свою собственную обертку вокруг функции пакета React Native Keychain.

export const getToken = () => getGenericPassword().then(creds => creds.password);

Проблема в том, что тип getGenericPassword() имеет вид:

function getGenericPassword(
  options?: Options
): Promise<boolean | {service: string, username: string, password: string}>;

И мойЛинтер жалуется, что ключевой пароль не существует, если кредит имеет тип boolean.

Property 'password' does not exist on type 'boolean | { service: string; username: string; password: string; }'.
  Property 'password' does not exist on type 'false'.

Как выбрать одно из этих значений?

1 Ответ

0 голосов
/ 06 октября 2018

Если значение логическое, оно не имеет этих свойств.Сначала вы должны обработать случай, когда результатом является логическое значение:

if (typeof creds == "boolean") {
    // Handle a boolean result
} else {
    // You can access the fields here
}

TypeScript понимает, что внутри ветви if результат является логическим, а внутри ветви else это не так, поэтому он долженбыть вашим типом словаря.

Если Typescript не работает так, как вы, вы можете написать код, который игнорирует случай, когда обещание возвращает логическое значение, и у вас возникнет проблема во время выполнения, когда вы попытаетесь прочитать .password от false

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...