Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如果对象';s的布尔属性为true_Typescript_Oop_Generics - Fatal编程技术网

Typescript 如果对象';s的布尔属性为true

Typescript 如果对象';s的布尔属性为true,typescript,oop,generics,Typescript,Oop,Generics,我已经试着找到了解决方案,但似乎无法找到在泛型中如何防止基于属性值将对象包含到数组中 在一次在线采访中,我得到了以下练习,在一个小时内,我应该发展出以下几点: 一个有五只动物和两只鸟的动物园,两个饲养员在夜间停留,四个饲养员在早上停留。只有诺曼被允许进入老虎的笼子 我开始做这项工作,但在index.ts上遇到了困难,我可以做到以下几点: 狮子:约翰; 但我想用打字脚本来阻止我把约翰加入狮子,相反,它让我。我只希望诺曼和其他在《狮子手》中任职的员工,以及只有其40; u dangerHandler

我已经试着找到了解决方案,但似乎无法找到在泛型中如何防止基于属性值将对象包含到数组中

在一次在线采访中,我得到了以下练习,在一个小时内,我应该发展出以下几点:

一个有五只动物和两只鸟的动物园,两个饲养员在夜间停留,四个饲养员在早上停留。只有诺曼被允许进入老虎的笼子

我开始做这项工作,但在index.ts上遇到了困难,我可以做到以下几点: 狮子:约翰; 但我想用打字脚本来阻止我把约翰加入狮子,相反,它让我。我只希望诺曼和其他在《狮子手》中任职的员工,以及只有其40; u dangerHandler)属性为真的员工才应该被允许

沙箱位于以下位置:

在app.js中

我想用打字脚本来阻止我把约翰加入狮队,而不是让我加入

const norman:Employee = new Employee("norman", Gender.MALE, EmployeeTitle.ZOOKEEPER, true);
const john:Employee = new Employee("john", Gender.MALE, EmployeeTitle.ZOOKEEPER);

const lion = new Lion("zumba");
lion.assignHandler(john)

您只需在
Animal.ts
中更新
assignhandler()
,即可检查传入方法的
employee
是否将
isDangerHandler
属性设置为
True

public assignHandler(employee: Employee): void {
  if (employee.isDangerHandler) {
    this._handlers.push(employee);
  }
}

我简化了您的示例,但您可以从以下建模中获得灵感,看看它是否适合您:

typeof动物=“危险”|“无害”
界面动物{
名称:string
assignHandler:(处理人:员工)=>void
}
狮子类动物{
构造函数(只读名称:字符串){}
转让处理人(处理人:员工){
日志(处理程序)
}
}
班级员工{
构造函数(只读名称:string,只读canHandle:T){}
}
const norman=新员工('norman','danger')
const john=新员工(“john”,“无害”)
const lion:lion=新狮子(“尊巴”)
lion.assignHandler(norman)//编译
assignHandler(john)//不编译

因此,在泛型中,如果实例被添加到对象数组中,并且typescript可以看到该对象上的属性被设置为true,那么我们就无法对该属性进行检查。我想要的是typescript不允许我添加isDangerHandler设置为true的employee对象
泛型
可以帮助您防止添加错误的
类型
,从而确保您的代码是
类型安全的
。在您的示例中,
isDangerHandler
是一个
属性
泛型
不处理
属性
。谢谢codemax,我明白您的意思,现在我明白了。谢谢Pritam,这正是我想看到的,我真的很感激。谢谢你的帮助:)有一个问题,不过现在我不能把它添加到任何动物身上类Zoo{private{u animals:Array=[];构造函数(private{u name:string){}public addAnimal(animal:animal):void{this.\u animals.push(animal);}}const lion:lion=new lion('Zumba')lion.assignHandler(norman)//编译const Zoo=new Zoo('乔治亚动物园');动物园.动物(狮子)`
public assignHandler(employee: Employee): void {
  if (employee.isDangerHandler) {
    this._handlers.push(employee);
  }
}