如何仅在flowtype中使用类属性来验证参数?

如何仅在flowtype中使用类属性来验证参数?,flowtype,Flowtype,我有以下代码 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({

我有以下代码

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})

可以使用结构类型:

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())

可以使用结构类型:

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())

您可以为此定义类型:

/* @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});

您可以看到正在运行的代码

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

/* @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});

您可以看到代码正在运行

我认为这是唯一的方法,但我希望避免为此创建另一种类型。但是这是可行的,所以让我们继续\o/@SibeliusSeraphini,您可以“内联”该类型。看看阿里亚的答案。但就我个人而言,我更喜欢显式地为lisability创建类型。我认为这是唯一的方法,但我希望避免为此创建另一个类型。但是这是可行的,所以让我们继续\o/@SibeliusSeraphini,您可以“内联”该类型。看看阿里亚的答案。但就我个人而言,我更喜欢显式地为lisability创建类型。