TypeScript:不可分配给 boolean 或 PromiseLike

Posted

技术标签:

【中文标题】TypeScript:不可分配给 boolean 或 PromiseLike【英文标题】:TypeScript: is not assignable to boolean or 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>'.

我做错了什么?

【问题讨论】:

【参考方案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);
    );

【讨论】:

以上是关于TypeScript:不可分配给 boolean 或 PromiseLike的主要内容,如果未能解决你的问题,请参考以下文章

void' 不可分配给类型为 '(value: User[], index: number) => boolean' 的参数

TypeScript 泛型:'类型不可分配给类型 T'

与 Typescript 反应:“never[]”类型的参数不可分配给“StateProperties |”类型的参数(() => 状态属性)'

UserModel 不可分配给 Document | 类型的参数nulll [带有 Typescript 的猫鼬]

类型“字符串”不可分配给类型“WebkitAppearance |在 React + TypeScript 中未定义?

TypeScript 2.4.1 -> fontWeight -> 类型 'number' 不可分配给类型 '"inherit" | 400 |