TypeScript: нельзя назначить логическим или PromiseLike - PullRequest
0 голосов
/ 14 октября 2018

Я пишу приложение React Native с использованием TypeScript?

Я написал оболочку для функций из React Native Firebase следующим образом:

export const checkPermissions = (): Promise<boolean> =>
  new Promise((resolve, reject) => {
    firebase
      .messaging()
      .hasPermission()
      .then(enabled => {
        if (enabled) {
          return resolve(enabled);
        } else {
          return firebase.messaging().requestPermission();
        }
      });
  });

Теперь я получаю следующую ошибку:

[ts]
Argument of type '(enabled: boolean) => void | Promise<boolean>' is not assignable to parameter of type '(value: boolean) => boolean | PromiseLike<boolean>'.
  Type 'void | Promise<boolean>' is not assignable to type 'boolean | PromiseLike<boolean>'.
Type 'void' is not assignable to type 'boolean | PromiseLike<boolean>'.

Что я делаю не так?

1 Ответ

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

Это потому, что вы возвращаете firebase.messaging().requestPermission(); как метод, а не его результаты, что вам нужно сделать, это соединить эти два обещания следующим образом:

export const checkPermissions = (): Promise<boolean> => {
    return new Promise((resolve, reject) => {
        firebase
            .messaging()
            .hasPermission()
            .then(enabled => {
                if (enabled) {
                    resolve(enabled);
                } else {
                    firebase.messaging().requestPermission()
                        .then(resolve)
                        .catch(reject);
                }
            }).catch(reject);
    });
}
...