Skip to content

Instantly share code, notes, and snippets.

View millsp's full-sized avatar
🌴
🌞

pierre millsp

🌴
🌞
View GitHub Profile
@millsp
millsp / path.ts
Last active July 10, 2022 06:45
Dotted paths with ts-toolbelt
import {
A,
F,
B,
O,
I,
} from 'ts-toolbelt';
type OnlyUserKeys<O> =
O extends L.List
@millsp
millsp / ts-dts-bundle.sh
Last active May 21, 2020 23:46
Create a single bundle of your TypeScript d.ts declaration files
#!/bin/bash
mkdir -p out
npx tsc src/index.ts -d --emitDeclarationOnly --module amd --outFile out/index.d.ts &&
echo "
declare module '<npm package name>' {
import main = require('index');
export = main;
import {Object, Tuple, Number} from 'ts-toolbelt'
// Merge two types together
type merge = Object.MergeUp<{name: string}, {age?: number}>
// Update the type of a field
type update = Object.Update<{age: string}, 'age', number>
// Make some fields optional
type optional = Object.Optional<{name: string, age: number}, 'age'>
{"lastUpload":"2020-08-16T14:05:01.885Z","extensionVersion":"v3.4.3"}
@millsp
millsp / ts-toolbelt-heavy-test.ts
Last active April 17, 2020 16:59
512000 Minus Operations in 1.3 seconds
import {Any, Number} from 'ts-toolbelt'
/** 512000 Minus Operations
* 80 * 80 * 80 Operations
* ~ 10 240 000 Iterations
* ~ 1.30sec
* @ 3.80GHz
* typescript@3.8.0
*/
type test = NestNestTest<'-20'> // 1.3s
declare function curry<F extends (...args: any) => any>(f: F): void
class Test {
a?: string
b?: object
c?: number
d?: [string, Test]
e?: [object, Test]
f?: [number, Test]
type Head<T extends any[]> =
T extends [any, ...any[]]
? T[0]
: never
type Tail<T extends any[]> =
((...t: T) => any) extends ((_: any, ...tail: infer TT) => any)
? TT
: []
type Head<T extends any[]> =
T extends [any, ...any[]]
? T[0]
: never
type Tail<T extends any[]> =
((...t: T) => any) extends ((_: any, ...tail: infer TT) => any)
? TT
: []
type Head<T extends any[]> =
T extends [any, ...any[]]
? T[0]
: never
type Tail<T extends any[]> =
((...t: T) => any) extends ((_: any, ...tail: infer TT) => any)
? TT
: []
type Head<T extends any[]> =
T extends [any, ...any[]]
? T[0]
: never
type Tail<T extends any[]> =
((...t: T) => any) extends ((_: any, ...tail: infer TT) => any)
? TT
: []