sum-types
nominal
sum-types | nominal | |
---|---|---|
8 | 3 | |
42 | 66 | |
- | - | |
5.9 | 4.0 | |
3 months ago | 7 days ago | |
TypeScript | TypeScript | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
sum-types
-
Either type
I entirely agree about using symbols. sum-types does that.
-
Question about error handling in Typescript
With fp-ts and sum-types you'd handle this functionally like so:
-
type .kind checks vs. class instanceof checks
If you're looking to have discriminated unions like Rust, follow that section to roll your own or look for a library that's already implemented them. fp-ts has everything under the sun in a Haskell style, neverthrow has Rust-like Result and ResultAsync, and sum-types helps with the boilerplate of defining your own sum types.
-
Is there a more graceful way to create dependencies between object key settings?
I'd suggest sum-types. Instead of unsafe user-defined type guards you get safe pattern matching.
-
Best way to store persistent texts?
If you wanted to lean (more) into FP you could replace the Event type and buildPopup function with a sum type and pattern match respectively, as well as represent side effects like in popup with fp-ts' IO, make use of function composition, etc. The former in particular is great for readability:
-
Is there any known way to measure coverage of... types?
You can test types, at least in terms of asserting happy path types and whether a piece of code, runtime or purely type-level, should trigger a tsc type error. Here's an example using eslint-plugin-expect-type.
-
Has the unsoundness (will explain in the post) actually become a pitfall in practice?
Anywhere that overloads are needed will rely upon type assertions or the unsafety implicit in overloads, for example in fp-ts/function::pipe. It'll come up a lot with objects too when there isn't a preexisting primitive you can compose atop of, as in for example fp-ts-std/Record::pick. Something as generic as @unsplash/sum-types has assertions all over the place, though to be fair that's mostly again a case of struggles interacting with object types.
-
How to handle "mutable state" in a pure functional way
You might like @unsplash/sum-types also.
nominal
- Is there any known way to measure coverage of... types?
-
A humble proposal to improve Node <-> Deno compatibility
I'm working on a very simple library, Nominal. Nominal works both in Node and Deno, although I had to write some scripts to transform the code for Deno (mostly to add file extensions to the import statements).
-
@coderspirit/nominal - Crazily powerful nominal types on Typescript
The repo: https://github.com/Coder-Spirit/nominal
What are some alternatives?
TypeScript - TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
eslint-plugin-expect-type - ESLint plugin with ^? Twoslash, $ExpectError, and $ExpectType type assertions. 🧩
immutable-js - Immutable persistent data collections for Javascript which increase efficiency and simplicity.
typegoose - Typegoose - Define Mongoose models using TypeScript classes.
tsd - Check TypeScript type definitions
lambda-ioc - Super type safe dependency injection 💉 for TypeScript (inspired by Diddly)
mori - ClojureScript's persistent data structures and supporting API from the comfort of vanilla JavaScript
tsParticles - tsParticles - Easily create highly customizable JavaScript particles effects, confetti explosions and fireworks animations and use them as animated backgrounds for your website. Ready to use components available for React.js, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Inferno, Solid, Riot and Web Components.
Visual Studio Code - Visual Studio Code
wikari - 💡 A NodeJS TS library to control Philips WiZ bulbs.