type-plus
Version:
Provides additional types for TypeScript.
23 lines (22 loc) • 435 B
text/typescript
/**
* Converts a number or bigint `N` to negative.
* If `N` is already negative, it returns itself.
*
* @example
* ```ts
* ToNegative<5> // -5
* ToNegative<0> // 0
* ToNegative<-5> // -5
* ```
*/
export type ToNegative<N extends number | bigint> = N extends number
? N extends 0
? 0
: `-${N}` extends `${infer W extends number}`
? W
: N
: N extends 0n
? 0n
: `-${N}` extends `${infer W extends bigint}`
? W
: N