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
TypeScript
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];
};