export { Integer, NonNegativeInteger, PositiveInteger, isInteger, isNonNegativeInteger, isPositiveInteger, assertInteger, assertNonNegativeInteger, assertPositiveInteger, asInteger, asNonNegativeInteger, asPositiveInteger, }; function asInteger(n: Integer) { return n; } function asNonNegativeInteger(n: NonNegativeInteger) { return n; } function asPositiveInteger(n: PositiveInteger) { return n; } function isInteger(n: N): n is Integer { return Number.isInteger(n); } function isNonNegativeInteger(n: N): n is NonNegativeInteger { return Number.isInteger(n) && n >= 0; } function isPositiveInteger(n: N): n is PositiveInteger { return Number.isInteger(n) && n > 0; } function assertInteger(n: number, message: string) { if (!Number.isInteger(n)) throw Error(message); } function assertNonNegativeInteger(n: number, message: string) { if (!Number.isInteger(n) || n < 0) throw Error(message); } function assertPositiveInteger(n: number, message: string) { if (!Number.isInteger(n) || n <= 0) throw Error(message); } type Integer = number extends T ? never : `${T}` extends `${string}.${string}` | `${string}e-${string}` ? never : T; type NonNegativeInteger = number extends T ? never : `${T}` extends `-${string}` | `${string}.${string}` | `${string}e-${string}` ? never : T; type PositiveInteger = number extends T ? never : `${T}` extends `-${string}` | `${string}.${string}` | `${string}e-${string}` | `0` ? never : T;