how it works + limits: github.com/danfry1/typescrip…
playground: typescriptlang.org/play?#cod…
repo if you'd rather dig in there: github.com/danfry1/ts-checke…
cc @ctatedev @theo @boshen_c @jarredsumner if anything's set up wrong for your tool let me know and i'll fix it and rerun
all on one m5, so i'd love to see how it holds on other machines. commands to rerun are on the site
ts-checker-bench.danfry.dev
errors: tsc-ts matched tsgo byte for byte on all three.
bun printed the same error lines plus its own summary
tsc-rs and tsrs report 1 extra on outline and 10 on vscode, and the 7.1-dev builds they port report the same. so that comes from 7.1, not the ports
tsgo 7.0.2 as the reference, plus tsc-ts, tsc-rs, tsrs and bun check
type-fest, outline and vscode, each pinned to a commit, fresh process every run, no incremental cache
tsc-ts 0.0.4 and tsrs 0.18 shipped today, after this ran. rerun with those coming
Built an open benchmark off the back of this: 5 typescript checkers, 3 real projects, raw output behind every result
Controlled numbers come in under my quick first run. tsc-ts is 4.5x faster than tsgo on type-fest at defaults, 3.4x with both at 10 threads.
ts-checker-bench.danfry.dev
Replying to @CARLOSZIEGLER @cramforce
The errors matched tsgo 7.0.2 byte for byte on type-fest, outline and vscode with tsc-ts 0.0.3, clean and with errors planted on purpose.
Early days but that's a good sign
Daniel Fry retweeted
hey. here's a little demo of the most meaningful improvement to my productivity since speech-to-text.
Replying to @cramforce
ran the new tsc-ts against tsgo 7.0.2 on type-fest
tsgo: 18.3s
tsc-ts: 3.0s
identical errors too, even with 6 checks broken on purpose. tsgo with 8 checkers gets to 13.6s so it's not just threads
Replying to @tavus
Impressive work, but I can't get past the worry that technology like this makes life a lot easier for scammers and bad actors. What are the use cases you're most excited about?
Replying to @techsavvytravvy
the key is `"" & String` vs `"" & {}`. TS folds `"" & {}` away, so the last D swallows the rest. `"" & String` stays a real placeholder and pins the end, so "12345678" fails and "1234" works (no leading zero needed)
side by side: typescriptlang.org/play/?#co…
Replying to @JitPackJoyride
thanks for sharing Ajit, this looks great!🦾
another use: Ethereum addresses vs hashes (the case @MicahZoltu asked for in TypeScript issue #52243).
Address = exactly 40 hex chars, Hash = exactly 64, so mixing them up is a compile error. no brands, no runtime code.
playground: typescriptlang.org/play/?#co…
xitter.cf/techsavvytravvy/status…
builds on @techsavvytravvy's non-empty string trick. his gives you a minimum length, the `"" & String` end marker gives you an exact one.
i found a way to represent a non-empty string without branded types and without using `any`

ALT TypeScript code defining a NonEmptyString type that only accepts strings with at least one character, without using branded types or `any`. The example assigns a normal string successfully, then shows an empty string assignment marked as a type error. Below, a Zod schema builds the same rule at runtime with z.string().refine(...), checking that the string length is greater than zero and returning the message string must contain at least one character.








