Skip to content

Instantly share code, notes, and snippets.

View Andarist's full-sized avatar

Mateusz Burzyński Andarist

View GitHub Profile
@Andarist
Andarist / playgrounds.txt
Created October 27, 2023 09:22
TS Congress - Reverse Mapped Types TS playgrounds
// identity mapped type
https://www.typescriptlang.org/play?#code/PTAEEsDsAcFcBcBQ8Ce0CmoDyAjAVqALygDeioFoAZgPY0BcoAzvAE5QDmANOZTgIatGkWAFsc6VogC+iRCGqxIAY3jgakZGkwBJACbpIa1AB4AKgD4ipXhQDaAaQiRQAa3QoaVUGYC6jM0dfGTkFZX4AGwitDFAAZX5RTGJ9Q2MUE1w8CyA
// promisify mapped type
https://www.typescriptlang.org/play?#code/C4TwDgpgBA8gRgKygXigbygMwPbYFxQDOwATgJYB2A5gDRRwCGJBFArgLZwQlQC+AUP1CQoABRLZ2ZQmUwgAPABUAfCnT8omqAG0A0lEpQA1hBDZMURQF0CACgCUKVeMnSISvVeX8BQ8NBcpGUwyCAATNUDpWQV4BG9+MIgAYwAbJmhk7ApiKBIwZIIo4NCwwSyc4CxWYFYSaFR85IA6RhIHQUwauohm4AALCApbWwA3BlTHZFU0DS1x1J97IA
// SatisfyName, get access to ur own key in the callback
https://www.typescriptlang.org/play?#code/PTAEDMFcDsGMBcCWB7aAoeBPADgU1AMoCGSAzuJgHJEC2uAPACoB8oAvKAN5qigDaAaVCJooANa5MycKEYBdAFygAFNFq4lAgJTtWAN2SIAJgG40AXzNojuWABsiAJ3xQ4SVKFIlE5TAHkAIwArW3hqOiZmZWRgpWIyCnCGFi0lA2MrLwT-YNCk5U5QEFBkSHhsMp5QIiVVdR02Vm4q3jU6M15zABoqgNq23AamltARgY7QbostEyA
// provideValue, just pairs of data and callbacks that get *their* data as an argument
https://www.typescript
const microtask = () => {}
async function test() {
queueMicrotask(() => {
console.log("1");
queueMicrotask(() => {
console.log("2");
});
});
await microtask();
async function microtask() {
return Promise.resolve().then(() => {});
}
async function test() {
queueMicrotask(() => {
console.log("1");
queueMicrotask(() => {
console.log("2");
});
});
@Andarist
Andarist / gist:0294519c570a52fb14f4cdd3d589c880
Created February 23, 2023 08:49
Reverse mapped types brain dump
mapped types syntax and intro
https://www.typescriptlang.org/play?#code/C4TwDgpgBA8gRgKygXigbwFBW1AZge3wC4oBnYAJwEsA7AcwBosc4BDCkmgVwFs4IKGAL4YMoSFACSAEwg1gVUAB4AKgD4U6ZtgDaAaSi0oAawgh8uKCoC6JFfuvDR46AGVWPaKhlyFy+AhqGAD0wTgAegD8omLg0AAKFPg8VKRUuCCqGqiYOFD6hjQmZhZWtlAAFACUKBqJyakQqg5BIrES9SlpuFQQ0pqdqemZAUGhEdEYsgDGADbs0NP4NORQFGDTJIPdvdKiSyvAeFzAXBReaxsAdGwU1SFheU-PUFGiuCdnEFfAABZyFQqADdWLMasgNLkcCDZtooOM3kIqkA
a tweet that prompted the idea for the talk
https://twitter.com/kentcdodds/status/1608187990215655424
but since this isn't possible with satisfies (it doesn't participate in inference, in an example like that it only provides contextual types) the answer was to use a function with a reverse mapped type
@Andarist
Andarist / createLongLastingContext.ts
Created December 5, 2022 13:22
Hide value initialization in a React-oriented helper using context and conditional server/browser values
function createLongLastingContext<T>(factory: () => T) {
const defaultValue = typeof document !== "undefined" ? factory() : null;
const ctx = React.createContext<T | null>(defaultValue);
return {
useContext: () => {
const value = React.useContext(ctx);
if (!value) {
throw new Error("Context not initialized.");
}
return value;
@Andarist
Andarist / machine.js
Created December 30, 2021 23:44
Generated by XState Viz: https://xstate.js.org/viz
const createSingleState = () => ({
initial: "fetch",
states: {
fetch: {
invoke: {
src: "fetchSmth",
onDone: {
target: "done",
actions: "notifySingleSuccess"
}
@Andarist
Andarist / decode-ts-flags.js
Created September 22, 2021 07:25
simple script to decode TS type flags
// source
524288; // {"basics":["Object"],"composites":["StructuredType","StructuredOrInstantiable","ObjectFlagsType","Narrowable","NotPrimitiveUnion","IncludesMask"]}
// target
8388608; // {"basics":["IndexedAccess"],"composites":["TypeVariable","InstantiableNonPrimitive","Instantiable","StructuredOrInstantiable","Simplifiable","Narrowable","NotPrimitiveUnion","IncludesWildcard"]}
var flags = {
Any: 1 << 0,
Unknown: 1 << 1,
String: 1 << 2,
Number: 1 << 3,
@Andarist
Andarist / machine.js
Created July 20, 2021 12:52
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
@Andarist
Andarist / machine.js
Created October 8, 2020 09:21
Generated by XState Viz: https://xstate.js.org/viz
Machine(
{
context: {
networkQuality: "good",
},
on: {
REPORT_NETWORK_QUALITY: {
actions: [
assign({
networkQuality: (_, ev) => ev.networkQuality,
@Andarist
Andarist / machine.js
Created August 8, 2020 22:29
Generated by XState Viz: https://xstate.js.org/viz
Machine({
initial: 'fetching_user',
states: {
fetching_user: {
invoke: {
src: 'fetchUser',
onDone: [{
cond: 'hasUser',
target: 'fetching_resources'
}, {