export declare function lastOf(ts: T[]): T | null; export declare function sortBy(ts: T[], key: (t: T) => number | string): void; export declare function getOrInsert(map: Map, k: K, fallback: (k: K) => V): V; export declare function getOrElse(map: Map, k: K, fallback: (k: K) => V): V; export declare function getOrThrow(map: Map, k: K): V; export interface HasKey { readonly key: string | number; } export declare class KeyedSet implements Iterable { private map; getOrInsert(t: T): T; forEach(fn: (t: T) => void): void; [Symbol.iterator](): IterableIterator; } export declare function itMap(it: Iterable, f: (t: T) => U): Iterable; export declare function itForEach(it: Iterable, f: (t: T) => void): void; export declare function itReduce(it: Iterable, f: (a: U, b: T) => U, init: U): U; export declare function zeroPad(s: string, width: number): string; export declare function formatPercent(percent: number): string; export declare function fract(x: number): number; export declare function triangle(x: number): number; export declare function binarySearch(lo: number, hi: number, f: (val: number) => number, target: number, targetRangeSize?: number): [number, number]; export declare function noop(...args: any[]): void; export declare function objectsHaveShallowEquality(a: T, b: T): boolean; export declare function memoizeByShallowEquality(cb: (t: T) => U): (t: T) => U; export declare function memoizeByReference(cb: (t: T) => U): (t: T) => U; export declare function lazyStatic(cb: () => T): () => T; export declare function decodeBase64(encoded: string): Uint8Array;