one thing I wish typescript had was an ability mark typechecks as runtime.

Commonly I'll have a nodejs express app which serves an api and i've love a easy way to validate an interface against the payload passed in. Maybe it would be as simple as a function JSON.parseWithChecking(payload) or some annotation to get the interface reflected and passed into this function at runtime. It's normally always at deserialisation that this problem occurs.

Wouldn't it be better to use a JSON Schema validator in this case?

Then you're maintaining two definitions - typescript ones and json schema ones. But thanks for the idea :)

Well, you could have one or the other and then just convert a schema to an Interface [1], or vice versa [2].

The reason I like schema-first is because a schema allows you to be way more strict about what's accepted in most cases, e.g. validating an entry via RegEx. It tends to make APIs safer and runtime errors more clear.

[1] https://github.com/bcherny/json-schema-to-typescript

[2] https://github.com/YousefED/typescript-json-schema