total-typescript / ts-reset

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

Filter throws error when using `as const` #193

Open IanVS opened 3 months ago

IanVS commented 3 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.