打字稿意外令牌
Typescript unexpected token
我应该根据工作的日程安排和个人可用性来筛选工作。
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 returns 出现意外标记错误。
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;
};
我哪里错了missing/doing?
根据对问题本身的评论,您收到此错误是因为您混淆了在 Typescript 中编写函数的两种方法。
编写函数的一种方法是编写function doSomething() { ... }
。您只能在范围内执行此操作,该范围允许声明 new things 。例如,新文件中的空白 space 是该模块的 top-most 范围,但每次输入新函数甚至输入控制块时也会创建一个范围 if
。一旦你像这样声明了一个函数,你就可以通过简单地说 doSomething()
来调用它,只要你仍然可以在声明函数的范围内“看到”。
另一种方法是在 class 上声明一个 方法 。您在通过编写 doSomething() { ... }
(没有 function
)来定义 class 时执行此操作。如果您在 class 中,则必须使用 this.doSomething()
在 class 的特定实例上访问像这样的普通实例方法,如果您引用特定的实例,则必须使用 bob.doSomething()
class 名为 bob 的实例。
在这种情况下,您将 findAvailableDays
声明为作用域函数,但在 space 中编译器需要 class 方法。您可以通过删除 function
然后必须调用 this.findAvailableDays(...)
或将您的函数声明移出 class 并移至文件的顶部范围(您在这种情况下可以这样做,因为它不会从 class).
内部读取任何其他内容
我应该根据工作的日程安排和个人可用性来筛选工作。
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 returns 出现意外标记错误。
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;
};
我哪里错了missing/doing?
根据对问题本身的评论,您收到此错误是因为您混淆了在 Typescript 中编写函数的两种方法。
编写函数的一种方法是编写function doSomething() { ... }
。您只能在范围内执行此操作,该范围允许声明 new things 。例如,新文件中的空白 space 是该模块的 top-most 范围,但每次输入新函数甚至输入控制块时也会创建一个范围 if
。一旦你像这样声明了一个函数,你就可以通过简单地说 doSomething()
来调用它,只要你仍然可以在声明函数的范围内“看到”。
另一种方法是在 class 上声明一个 方法 。您在通过编写 doSomething() { ... }
(没有 function
)来定义 class 时执行此操作。如果您在 class 中,则必须使用 this.doSomething()
在 class 的特定实例上访问像这样的普通实例方法,如果您引用特定的实例,则必须使用 bob.doSomething()
class 名为 bob 的实例。
在这种情况下,您将 findAvailableDays
声明为作用域函数,但在 space 中编译器需要 class 方法。您可以通过删除 function
然后必须调用 this.findAvailableDays(...)
或将您的函数声明移出 class 并移至文件的顶部范围(您在这种情况下可以这样做,因为它不会从 class).