打字稿意外令牌

时间:2020-09-11 20:32:25

标签: javascript android typescript ubuntu 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返回了意外的令牌错误。

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

enter image description here

我在这里想念什么/做错什么了吗?

1 个答案:

答案 0 :(得分:0)

基于对问题本身的评论,您会收到此错误,因为您已将在Typescript中编写函数的两种方法混为一谈。

编写函数的一种方法是编写function doSomething() { ... }。您只能在范围内(允许声明新的事物的地方)执行此操作。例如,新文件中的空格是该模块的最高级作用域,但每次您输入新功能甚至输入if之类的控制块时,都会创建一个作用域。声明了这样的函数后,只要说“ doSomething()”即可调用它,只要您仍然可以在声明该函数的范围内“看到”即可。

另一种方法是在类上声明方法。您可以在编写类时通过编写doSomething() { ... }(不使用function)来执行此操作。如果您在类的特定实例中,则必须使用this.doSomething()在类的特定实例上访问此类普通实例方法,如果引用的是名为bob的类的特定实例,则必须使用bob.doSomething()。 / p>

在这种情况下,您将findAvailableDays声明为作用域函数,但在编译器需要类方法的空间中。您可以最轻松地解决此问题,方法是删除function然后必须调用this.findAvailableDays(...),或者将函数声明移出类并移至文件的顶部范围(可以在此方法中完成此操作)这种情况是因为它没有从类内部读取其他任何内容。