【问题标题】:TypeScript: is not assignable to boolean or PromiseLikeTypeScript:不可分配给 boolean 或 PromiseLike
【发布时间】:2019-03-19 03:28:28
【问题描述】:

我正在使用 TypeScript 编写一个 React Native 应用程序?

我已经为 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>'.

我做错了什么?

【问题讨论】:

    标签: typescript react-native typescript-typings react-native-firebase typescript-types


    【解决方案1】:

    那是因为您将 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);
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-24
      • 2017-06-29
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 2019-01-04
      相关资源
      最近更新 更多