Skip to content

When specifying CronItemOptions, backfillPeriod is not optional in TypeScript #495

Open
@danieldiekmeier

Description

@danieldiekmeier

Summary

I'm defining my cronList as an array of CronItems, so that I can later pass them through parseCronItems. This has worked great! (Thank you very much for the library!)

Today, I wanted to add maxAttempts: 1 to one of my CronItems, and created an options object for that. TypeScript started complaining that the options must have a backfillPeriod key.

Steps to reproduce

Use this code:

import { type CronItem } from 'graphile-worker'

const cronList: CronItem[] = [
  {
    task: 'example',
    match: '* * * * *,
    identifier: 'example',
    options: {
      maxAttempts: 1,
      // TypeScript: Property 'backfillPeriod' is missing in type '{ maxAttempts: number; }' 
      //             but required in type 'CronItemOptions'. ts(2741)
    },
  },
}

Expected results

I'd expect the key to be optional, like the other options in CronItemOptions.

Actual results

At runtime, this seems to work correctly and I don't see any issues. The problem is only the type error.

Additional context

  • Node.js 20.17.0
  • TypeScript v5.6.2

Possible Solution

I think the problem is that Graphile Worker uses the same interface internally and externally. If I understand correctly, the backfillPeriod is defaulted to 0 here:

worker/src/crontab.ts

Lines 151 to 153 in 436e299

if (!backfillPeriod) {
backfillPeriod = 0;
}

So it makes sense that internally, backfillPeriod is always defined. But since this runtime default exists, I think there should be a slightly different interface to the outside.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions