【问题标题】:how to use only class properties in flowtype for validation of parameters?如何仅使用流类型中的类属性来验证参数?
【发布时间】:2017-07-26 23:26:34
【问题描述】:

我有以下代码

class User {
   id: string,
   name: string,
   email: string
   isAdmin: boolean,
};

const isAdmin = (user: User): boolean => {
   if (user.isAdmin) return true;

   return false;
}

我希望 isAdmin 接受另一个不是来自 User 类的对象,但它具有 isAdmin 属性。

示例:

isAdmin({isAdmin: true})

【问题讨论】:

    标签: flowtype


    【解决方案1】:

    您可以为此定义一个类型:

    /* @flow */
    
    class User {
       id: string;
       name: string;
       email: string;
       isAdmin: boolean;
    };
    
    type HasAdmin = {
      isAdmin: boolean;
    }
    
    const isAdmin = (hasAdmin: HasAdmin): boolean => {
       if (hasAdmin.isAdmin) return true;
    
       return false;
    }
    
    isAdmin(new User());
    
    isAdmin({isAdmin: true});
    

    你可以看到代码在运行here

    【讨论】:

    • 我认为这是唯一的方法,但我想避免为此创建另一种类型。但是这很有效,所以让我们继续 \o/
    • @SibeliusSeraphini 您可以“内联”该类型。看看 Aria 的回答。但就我个人而言,我更喜欢显式地创建 lisability 的类型。
    【解决方案2】:

    您可以使用结构类型:

    class User {
       id: string
       name: string
       email: string
       isAdmin: boolean
    };
    
    const isAdmin = (user: {isAdmin: boolean}): boolean => {
       if (user.isAdmin) return true;
    
       return false;
    }
    
    isAdmin({isAdmin: true})
    isAdmin(new User())
    

    【讨论】:

      猜你喜欢
      • 2020-02-02
      • 1970-01-01
      • 2019-01-15
      • 2014-01-28
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多