Skip to content

Instantly share code, notes, and snippets.

@rjdestigter
rjdestigter / Test.tsx
Created November 29, 2017 01:20
TypeScript React classes with generics throw Type '{}' is not assignable to type 'R'.
// Libs
import * as React from 'react'
// Types
interface Bar {
id: number
}
interface Party<R extends Bar> {
attr: keyof R
@rjdestigter
rjdestigter / verify-packages.js
Created May 3, 2018 19:16
Double check if lerna managed packages are up-to-date with versions and don't conflict with npm
const util = require('util')
const exec = util.promisify(require('child_process').exec)
const fs = require('fs')
const figures = require('figures')
const ansi = require('ansicolor').nice
const cmdList = 'find ./packages -type f -name package.json'
async function getPathOfPackageJsons() {
const { stdout, stderr } = await exec(cmdList)
@rjdestigter
rjdestigter / training-5.ts
Created August 14, 2018 04:28
scalaz-state-talk converted from Scala to TypeScript with fp-ts
import { State, modify, gets } from 'fp-ts/lib/State'
import { Option, fromNullable, none, some } from 'fp-ts/lib/Option'
import * as _ from 'lodash'
/** Use state combinators. */
type StateCache<A> = State<Cache, A>
interface SocialService {
followerStats(u: string): StateCache<FollowerStats>
}
@rjdestigter
rjdestigter / mapStateToProps.ts
Last active September 21, 2018 19:11
A type safe function that takes a map of state selectors and returns, - a function that takes state and returns, - a map with the same keys and the result of the selectors.
/**
* @private
*
* An object representing a map of selector functions that
* accept application state and return a value.
*/
interface MapOfSelectors {
[prop: string]: (storeState: any) => any
}
@rjdestigter
rjdestigter / getters-setters.ts
Last active September 26, 2018 03:38
Composable getters and setters with TypeScript
export function composeGetter<K extends string>(prop: K) {
function getter<T extends { [P in K]?: any }>(object: T): T[typeof prop]
function getter<T extends { [P in K]: any }>(object: T) {
return object[prop]
}
return getter
}
export function composeSetter<K extends string>(prop: K) {
@rjdestigter
rjdestigter / example.ts
Created October 23, 2018 18:11
map and flatMap implementation for selectors
interface Fruit {
isRotten: boolean
}
interface Apple extends Fruit {
apple: true
}
interface Banana extends Fruit {
@rjdestigter
rjdestigter / lazy-list.ts
Created November 15, 2018 21:51
Lazy list experiment in JavScript
/**
* Type describing a "lazy" value, a.k.a a function returnting the value
*/
type Lazy<A> = () => A
/**
* Continued
*/
class Cons<A> {
constructor(readonly head: Lazy<A>, readonly tail: Lazy<List<A>>) {}
@rjdestigter
rjdestigter / createDeepEqualSelector.ts
Last active November 27, 2018 22:33
Memoizing element transformations of array data selectors
// Redux
import * as _ from 'lodash'
import { createSelectorCreator } from 'reselect'
import memoize from './defaultMemoizeWithDeepEqualsOutput'
/** Selector creator for lists. Uses _.isEqual for deeper array comparisons */
export default createSelectorCreator(memoize as any, _.isEqual)
AddAsset
onChangeLabel -> AddAsset
onChangeParent -> AddAsset
Submit -> PostAsset
PostAsset
ok -> FetchFieldInfo
bad -> AddAsset
FetchFieldInfo
ok -> PutFieldInfo
bad -> Failure
@rjdestigter
rjdestigter / SketchSystems.spec
Last active September 25, 2019 17:46
TodoItem
TodoItem
Complete
uncheck -> Incomplete
Incomplete*
check -> Complete