-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
type.ts
53 lines (51 loc) · 1.05 KB
/
type.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
* A type predicate function.
*
* ```ts
* import { as, is, type Predicate } from "@core/unknownutil";
*
* type Person = {
* name: string;
* age: number;
* address?: string | undefined;
* };
* const isPerson = is.ObjectOf({
* name: is.String,
* age: is.Number,
* address: as.Optional(is.String),
* }) satisfies Predicate<Person>;
* ```
*/
export type Predicate<T> = (x: unknown) => x is T;
/**
* A type predicated by {@linkcode Predicate<T>}.
*
* ```ts
* import { as, is, type PredicateType } from "@core/unknownutil";
*
* const isPerson = is.ObjectOf({
* name: is.String,
* age: is.Number,
* address: as.Optional(is.String),
* });
*
* type Person = PredicateType<typeof isPerson>;
* // type Person = {
* // name: string;
* // age: number;
* // address?: string | undefined;
* // };
* ```
*/
export type PredicateType<P> = P extends Predicate<infer T> ? T : never;
/**
* JavaScript primitive types.
*/
export type Primitive =
| string
| number
| bigint
| boolean
| null
| undefined
| symbol;