Functional Composition with Static Types in TypeScript
- snippets from live coding session
- Tomasz Ducin, @tomasz_ducin
- Wrocław TypeScript #3, 2019.03.27
Machine({ | |
id: 'AuthorizeDevice', | |
initial: 'chooseMethod', | |
states: { | |
chooseMethod: { | |
on: { | |
CHOOSE_ADD_DEVICE: 'addDeviceForm', | |
} | |
}, | |
addDeviceForm: { |
Machine({ | |
id: 'AuthorizeDevice', | |
initial: 'chooseMethod', | |
states: { | |
chooseMethod: { | |
on: { | |
CHOOSE_ALLOW_ONCE: 'allowOnceToken', | |
CHOOSE_ADD_DEVICE: 'addDeviceForm', | |
} | |
}, |
// CORRECT SUBMIT EVENT: | |
// { | |
// "type": "SUBMIT", | |
// "password": "1234" | |
// } | |
// pure mocks | |
const delay = (time) => { | |
return new Promise((res, rej) => { |
{ | |
"type": "object", | |
"properties": { | |
"orderId": { | |
"type": "string", | |
"faker": "random.uuid" | |
}, | |
"customer": { | |
"type": "string", | |
"faker": "name.findName" |
import { INC } from './constants'; | |
export const Inc = () => ({ | |
type: INC as typeof INC | |
}) | |
export type Actions = | |
| ReturnType<typeof Inc> |
Lorem Ipsum License | |
Copyright (c) [year] [fullname] | |
Permission is Lorem ipsum hereby granted, dolor sit amet, free of charge, | |
to any person obtaining a copy consectetur adipiscing elit. Proin nibh augue | |
of this software and associated documentation files (the "Software"), | |
suscipit a, scelerisque sed, to deal lacinia in, mi. Cras vel lorem. | |
Etiam pellentesque aliquet tellus, in the Software without restriction, | |
Phasellus pharetra nulla ac diam. Quisque semper justo at risus including |
node_modules |
const API_URL = 'http://localhost:3011/' | |
const OfficeModel = { | |
getCollection(){ | |
return fetch(`${API_URL}offices`) | |
.then(res => res.json()) | |
}, | |
async __extendOfficeWithEmployees(office){ | |
const employees = await EmployeeModel.getCollection(office.city) | |
return { ...office, employees } |