Safe Type
Usage
import { Assert, IsObject, IsString, IsType, Checker } from "@paulpopat/safe-type";
function Thing(argument: unknown) {
Assert(argument, IsString);
}
function ThingWithoutException(argument: unknown) {
if (!IsString(argument)) {
console.log("The argument is not a string");
return;
}
}
type String = IsType<typeof IsString>;
function DoSomething<T>(argument: unknown, checker: Checker<T>) {
Assert(argument, checker);
}
DoSomething({ test: "value" }, IsObject({ test: IsString }))
It is as simple as that!
Inference is fully operational, no casting will be required.
Checkers
Find below a list of all available checkers:
- IsString
- IsNumber
- IsBigInt
- IsSymbol
- IsBoolean
- IsFunction
- IsDate
- IsLiteral
- A function that takes a value and will return a checker for that value as a type.
- IsArray
- A function that takes a checker and returns an checker for an array of the type of the provided checker.
- IsTuple
- A function that takes any number of arguments that are checkers and returns a checker for a tuple of provided checkers.
- IsUnion
- A function that takes any number of arguments that are checkers and returns a checker for any one of the provided checkers.
- IsIntersection
- A function that takes any number of arguments that are checkers and returns a checker for all of the provided checkers.
- IsObject
- A function that takes an object where each key is a checker and returns a checker for an object of the type provided.
- IsDictionary
- A function that takes a checker and returns a checker for a dictionary with a key of string and value of the checker.
- Optional
- A function that takes a checker and returns a checker for that type and null or undefined.
- DoNotCare
- Always returns true and infers unknown. Useful in the IsObject checker.
Utilities
Tools to work with the checkers to allow for type based controls.
- Assert
- Takes a checker and a value and throws if the checker is not the value. Supports inference.
- PatternMatch
- Performs an action for each possible type provided.