UNPKG

typegpu

Version:

A thin layer between JS and WebGPU/WGSL that improves development experience and allows for faster iteration.

50 lines (49 loc) 1.9 kB
export type Default<T, TDefault> = unknown extends T ? TDefault : T extends undefined ? TDefault : T; export type SwapNever<T, Replacement> = [T] extends [never] ? Replacement : T; export type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends (x: infer I) => void ? I : never; export type Prettify<T> = { [K in keyof T]: T[K]; } & {}; /** * Utility type that merges a partial type with defaults, where defaults are used * for properties not present in the partial type. */ export type WithDefaults<TPartial, TDefaults> = Omit<TDefaults, keyof TPartial> & TPartial; /** * Removes properties from record type that extend `Prop` */ export type OmitProps<T extends Record<string, unknown>, Prop> = Pick<T, { [Key in keyof T]: T[Key] extends Prop ? never : Key; }[keyof T]>; /** * Removes properties from record type that equal `Prop` */ export type OmitPropsExact<T extends Record<string, unknown>, Prop> = Pick<T, { [Key in keyof T]: [T[Key], Prop] extends [Prop, T[Key]] ? never : Key; }[keyof T]>; export type NullableToOptional<T> = { [K in keyof T as T[K] extends null ? K : never]?: T[K]; } & { [K in keyof T as T[K] extends null ? never : K]: T[K]; }; /** * The opposite of Readonly<T> */ export type Mutable<T> = { -readonly [P in keyof T]: T[P]; }; /** * Source: https://code.lol/post/programming/higher-kinded-types */ export type Assume<T, U> = T extends U ? T : U; /** * Any typed array */ export type TypedArray = Uint8Array | Uint16Array | Uint32Array | Int32Array | Float32Array | Float64Array; export declare function assertExhaustive(x: never, location: string): never; /** * Source: https://futurestud.io/tutorials/typescript-how-to-remove-index-signature-from-a-type */ export type RemoveIndexSignature<T> = { [K in keyof T as string extends K ? never : number extends K ? never : symbol extends K ? never : K]: T[K]; };