我应该根据工作时间表和个人空缺来过滤工作。
const jobs: JobRecord[] = [
{
"storeName": "Highwire Coffee Company",
"schedule": [
"Tuesday",
"Thursday",
],
...
},
{
"storeName": "Blue Bottle Coffee",
"rid": "recNgeUMcYhWUxw8b",
"schedule": [
"Thursday",
],
...
},
]
const availability: Availability = {
"friday": false,
"monday": false,
"thursday": true,
"tuesday": false,
"wednesday": true,
}
例如,考虑到以上这些输入,我应该制作一个仅返回商店名称为“ Blue Bottle Coffee”的作业的函数。
为此,我已经编写了这两个函数,但是很显然,我的函数findAvailableDays返回了意外的令牌错误。
filterJobs = (jobs: JobRecord[], availability: Availability): void => {
// Step 0: Clone the jobs input
const newJobs: JobRecord[] = cloneDeep(jobs);
console.log(newJobs, availability);
// Step 1: Remove jobs where the schedule doesn't align with the users' availability.
for (const[store, schedule] of Object.entries(jobs)){
var availDays: string[];
availDays = findAvailableDays(availability);
let checker = (availDays, schedule) => schedule.every(v => availDays.includes(v))
if(!checker(availDays, schedule)){
delete newJobs[store];
}
}
// Step 2: Save into state
this.setState({ jobs: newJobs });
};
function findAvailableDays (availability: Availability){
var availDays: string[];
availDays = [];
for (const [day, avail] of Object.entries(availability)){
if (avail){
availDays.push(day);
}
}
return availDays;
};
我在这里想念什么/做错什么了吗?
答案 0 :(得分:0)
基于对问题本身的评论,您会收到此错误,因为您已将在Typescript中编写函数的两种方法混为一谈。
编写函数的一种方法是编写function doSomething() { ... }
。您只能在范围内(允许声明新的事物的地方)执行此操作。例如,新文件中的空格是该模块的最高级作用域,但每次您输入新功能甚至输入if
之类的控制块时,都会创建一个作用域。声明了这样的函数后,只要说“ doSomething()
”即可调用它,只要您仍然可以在声明该函数的范围内“看到”即可。
另一种方法是在类上声明方法。您可以在编写类时通过编写doSomething() { ... }
(不使用function
)来执行此操作。如果您在类的特定实例中,则必须使用this.doSomething()
在类的特定实例上访问此类普通实例方法,如果引用的是名为bob的类的特定实例,则必须使用bob.doSomething()
。 / p>
在这种情况下,您将findAvailableDays
声明为作用域函数,但在编译器需要类方法的空间中。您可以最轻松地解决此问题,方法是删除function
然后必须调用this.findAvailableDays(...)
,或者将函数声明移出类并移至文件的顶部范围(可以在此方法中完成此操作)这种情况是因为它没有从类内部读取其他任何内容。