mattpocock / ts-reset

A 'CSS reset' for TypeScript, improving types for common JavaScript API's
https://www.totaltypescript.com/ts-reset
MIT License
7.9k stars 124 forks source link

Filter throws error when using `as const` #193

Closed IanVS closed 2 months ago

IanVS commented 7 months ago

I found a problem when using an object with readonly keys and accessing one of them dynamically. It's tough to explain, so here's a minimal example:

const test = {
  A: [{ key: 1 }, { key: 2 }],
  B: [{ key: 3 }, { key: 4 }],
} as const;

function check(x: 'A' | 'B') {
  test[x].filter(y => y.key > 1)
}

Results in an error:

Argument of type '<T>(y: T | undefined) => boolean' is not assignable to parameter of type 'BooleanConstructor'.
  Type '<T>(y: T | undefined) => boolean' provides no match for the signature 'new (value?: any): Boolean'.

If I remove ts-reset, remove as const, or access test.A directly, there is no error.

stychu commented 2 months ago

I have the same problem with a const array of objects. This is so annoying :(

none23 commented 2 months ago

Reproduction: TS Playground

none23 commented 2 months ago

The fix seems pretty easy, I've opened a PR