ianstormtaylor / superstruct

A simple and composable way to validate data in JavaScript (and TypeScript).

Home Page:https://docs.superstructjs.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Type-tests do not check for strict types

thoughtspile opened this issue · 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.