Improve typings in observable, computed, and map #111
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I'm very into Typescript (and I'll send you a PR of a Typescript+JSX+Snowpack Sinuous example soon!). I noticed it's hard to develop in TS with Sinuous. I'll show some examples:
Before
Here's
observable
andcomputed
that both resolve to "any", so typing isn't useful:This
computed
example is from your readmeHere's
map
showing an error about "Item":After
The new typings infer the type given to the functions observable/computed/map which fixes these issues.
Observables won't default to
Observable<any>
:Computed functions infer their return type too, so errors like this can be caught (where
messages
is anObservable<string[]>
:Also
map
doesn't use "Item" anymore, and instead infers types correctly from the function or list provided:The only hiccup is people will see
const list = observable([])
resolve asnever[]
if they have strict null checking on (as I do). See microsoft/TypeScript#8944. To fix this, as shown in the map picture just above, useobservable([] as string[])
.