superstruct icon indicating copy to clipboard operation
superstruct copied to clipboard

Type-tests do not check for strict types

Open thoughtspile opened this issue 2 years ago • 2 comments

Hi! I borrowed your typing test suite for my library, banditypes — thanks for the excellent job!

I quickly discovered that test<Expected>() util checks that struct returns type assignable to Expected, not strictly equal to it. This might be dangerous, as a struct might check for a narrower type than expected:

test<string | number>((x) => {
  assert(x, string())
  return x
})

I suggest migrating the suite to expect-type or otherwise checking for strict equality. For reference, here's my MR with the change — it's not too hard.

thoughtspile avatar Mar 03 '23 11:03 thoughtspile

Might be a way to do this with Vitest, will return to this.

yeoffrey avatar Jul 02 '24 16:07 yeoffrey

Afaik, vitest uses expect-type under the hood, so this should work as well

thoughtspile avatar Jul 04 '24 11:07 thoughtspile