assert-util-types v0.0.8
assert-util-types
TypeScript verifies that your program uses the right type as you write code, avoiding potential issues at runtime.
but, By using any, you expose yourself to issues that are difficult to trace and debug, especially once the code is deployed in production.
when we cannot determine the type because we don’t know the result of that library and fetched data. we need to use any type for them.
So, if you dont want to use any type. you can use assert-util-types.
⚙️ Installation
case: use npm
$ npm install assert-util-typescase: use yarn
$ yarn add assert-util-typescase: use pnpm
$ pnpm install assert-util-types📝 Usage
Nominal
nominal types is preventing confusion between two types. In regular Typescript you run into this problem:
type User = {
id: number
name: string
}
type Admin = {
id: number
name: string
}
const mike: Admin = {
id: 1,
name: 'mike'
}
const introduceMe = (props: User):string => {
const {id, name} = props;
return `No.${id}, User is ${name} !`
}
// oh... compilation was successful.
introduceMe(mike); // we can use User and Admin in the same way.but Nominal type solve this problem
import { Nominal } from 'assert-util-types';
type userId = Nominal<number, 'userId'>
type adminId = Nominal<number, 'adminId'>
type User = {
id: userId
name: string
}
type Admin = {
id: adminId
name: string
}
const mike = {
id: 1,
name: 'mike'
} as Admin
const introduceMe = (props: User):string => {
const {id, name} = props;
return `No.${id}, User is ${name} !`
}
// That's great! get an error!
introduceMe(mike); // Argument of type 'Admin' is not assignable to parameter of type 'User'.user defined type guard
asSomething functions to create the more complex type checks.
this functions passed the value in a value field upon success, or provides detailed error messages upon failure.
isString
import { isString } from 'assert-util-types';
isString('hello'); // true
isString(1); // falseassertString
import { assertString } from 'assert-util-types';
assertString('hello', 'target'); // ok
assertString(1, 'target'); // throw errorasString
import { asString } from 'assert-util-types';
asString('hello', 'target'); // 'hello'
asString(1, 'target'); // error message is "target should be string"isFilledString
import { isFilledString } from 'assert-util-types';
isFilledString('hello'); // true
isFilledString(''); // false
isFilledString(1); // falseassertFilledString
import { asFilledString } from 'assert-util-types';
asFilledString('hello', 'target'); // ok
asFilledString('', 'empty string'); // error message is "empty string should have least 1 character"
asFilledString(1, 'target'); // error message is "target should have least 1 character"asFilledString
import { asFilledString } from 'assert-util-types';
asFilledString('hello', 'target'); // 'hello'
asFilledString('', 'empty string'); // error message is "empty string should have least 1 character"
asFilledString(1, 'target'); // error message is "target should have least 1 character"isNumber
import { isNumber } from 'assert-util-types';
isNumber(1); // true
isNumber(NaN) // false
isNumber('1'); // falseassertNumber
import { assertNumber } from 'assert-util-types';
assertNumber(1, 'target'); // ok
assertNumber(NaN, 'NaN'); // error message is "NaN should be number"asNumber
import { asNumber } from 'assert-util-types';
asNumber(1, 'target'); // 1
asNumber(true, 'target'); // 1
asNumber('hello', 'NaN'); // TypeError: Cannot convert hello to numberisFilledArray
import { isFilledArray } from 'assert-util-types';
isFilledArray(['string', 'number']); // true
isFilledArray([]); // false
isFilledArray(1); // falseassertFilledArray
import { assertFilledArray } from 'assert-util-types';
assertFilledArray(['string', 'number'], 'target'); // ok
assertFilledArray([], 'empty array'); // error message is "empty array should have least 1 item"isObject
import { isObject } from 'assert-util-types';
isObject({}); // true
isObject([]); // false
isObject(1); // falseassertObject
import { assertObject } from 'assert-util-types';
assertObject({}); // ok
assertObject([], 'array'); // error message is "array should be object"assertMatchedType
import { assertMatchedType } from 'assert-util-types';
type User = {
id?: any;
name?: string;
email: string;
};
const obj: unknown = { id: 1, name: "foo" };
assertMatchedType<User>(obj, ["email"]); // throws errorLicence
MIT