Skip to content

Leverage TypeScript 5.x features: using, withResolvers, type predicates, template literals, satisfies - #79

Merged
veillette merged 1 commit into
mainfrom
claude/typescript-latest-features-HbVPM
Mar 1, 2026
Merged

Leverage TypeScript 5.x features: using, withResolvers, type predicates, template literals, satisfies#79
veillette merged 1 commit into
mainfrom
claude/typescript-latest-features-HbVPM

Conversation

@veillette

Copy link
Copy Markdown
Collaborator
  • tsconfig: bump lib from ES2022 to ES2024 + ESNext.Disposable, enabling
    Symbol.dispose and Promise.withResolvers type definitions

  • webcam.ts: add withDispose() helper to adapt .close() APIs to Symbol.dispose;
    use using decoder = withDispose(new ImageDecoder(...)) in getAnimatedWebPInfo
    so decoder.close() is guaranteed on early returns and exceptions; add
    [Symbol.dispose] to WebcamRecorder as an alias to cleanup(); rewrite
    stopRecording() and measureEmpiricalFrameRate() with Promise.withResolvers()
    to flatten the guard clauses out of the Promise constructor

  • PlottableProperty.ts: export isRecordPlottable / isLivePlottable type-guard
    functions with explicit p is T predicates (TS 5.5 can infer these, but
    explicit guards also make .filter(isRecordPlottable) produce RecordPlottable[])

  • ConfigurableGraph.ts: replace inline "accessor" in x checks with the named
    type guards from PlottableProperty

  • OverlayToolsModel.ts: add VelocityUnit and AccelerationUnit template literal
    types derived from CalibrationUnit; narrow velocityUnitProperty and
    accelerationUnitProperty from TReadOnlyProperty to the precise types

  • brand.ts: switch from const Brand: TBrand = {} (widens literal types) to
    const Brand = {} satisfies TBrand (validates shape while preserving literals)

https://claude.ai/code/session_014gWKu1ZSG9hxhwpFd776KV

…es, template literals, satisfies

- tsconfig: bump lib from ES2022 to ES2024 + ESNext.Disposable, enabling
  Symbol.dispose and Promise.withResolvers type definitions

- webcam.ts: add withDispose() helper to adapt .close() APIs to Symbol.dispose;
  use `using decoder = withDispose(new ImageDecoder(...))` in getAnimatedWebPInfo
  so decoder.close() is guaranteed on early returns and exceptions; add
  [Symbol.dispose] to WebcamRecorder as an alias to cleanup(); rewrite
  stopRecording() and measureEmpiricalFrameRate() with Promise.withResolvers()
  to flatten the guard clauses out of the Promise constructor

- PlottableProperty.ts: export isRecordPlottable / isLivePlottable type-guard
  functions with explicit p is T predicates (TS 5.5 can infer these, but
  explicit guards also make .filter(isRecordPlottable) produce RecordPlottable[])

- ConfigurableGraph.ts: replace inline "accessor" in x checks with the named
  type guards from PlottableProperty

- OverlayToolsModel.ts: add VelocityUnit and AccelerationUnit template literal
  types derived from CalibrationUnit; narrow velocityUnitProperty and
  accelerationUnitProperty from TReadOnlyProperty<string> to the precise types

- brand.ts: switch from const Brand: TBrand = {} (widens literal types) to
  const Brand = {} satisfies TBrand (validates shape while preserving literals)

https://claude.ai/code/session_014gWKu1ZSG9hxhwpFd776KV
@veillette
veillette merged commit 81924f2 into main Mar 1, 2026
1 check passed
@veillette
veillette deleted the claude/typescript-latest-features-HbVPM branch March 1, 2026 13:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants