type-challenges icon indicating copy to clipboard operation
type-challenges copied to clipboard

25747 - IsNegativeNumber

Open teamchong opened this issue 9 months ago • 0 comments

type IsNegativeNumber<T extends number> =
  IfUnion<T, never, number> extends T
    ? never
  : `${T}` extends `-${string}`
    ? true
  : false

type IfUnion<T, UnionCase, NonUnionCase, U = T> = T extends any ? [U] extends [T] ? NonUnionCase : UnionCase : never

type _Number1 = Expect<Equal<number extends 0 ?       '✅' : '❌', '❌'>>
type _Number2 = Expect<Equal<number extends number ?  '✅' : '❌', '✅'>>
type _Number3 = Expect<Equal<number extends -1 | -1 ? '✅' : '❌', '❌'>>
type _Number4 = Expect<Equal<number extends -1 ?      '✅' : '❌', '❌'>>
type _Number5 = Expect<Equal<number extends never ?   '✅' : '❌', '❌'>>

type _Never1 = Expect<Equal<never extends 0 ?         '✅' : '❌', '✅'>>
type _Never2 = Expect<Equal<never extends number ?    '✅' : '❌', '✅'>>
type _Never3 = Expect<Equal<never extends -1 | -1 ?   '✅' : '❌', '✅'>>
type _Never4 = Expect<Equal<never extends -1 ?        '✅' : '❌', '✅'>>
type _Never5 = Expect<Equal<never extends never ?     '✅' : '❌', '✅'>>

Playground

teamchong avatar Apr 27 '24 04:04 teamchong