type-plus 7.3.0 → 7.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/cjs/mix_types/any_or_never_type.d.ts +18 -10
- package/cjs/mix_types/any_or_never_type.d.ts.map +1 -1
- package/esm/mix_types/any_or_never_type.d.ts +18 -10
- package/esm/mix_types/any_or_never_type.d.ts.map +1 -1
- package/package.json +4 -3
- package/ts/any/readme.md +20 -3
- package/ts/mix_types/any_or_never_type.ts +18 -10
- package/ts/mix_types/readme.md +34 -0
package/README.md
CHANGED
|
@@ -1,20 +1,28 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { AnyType } from '../any/any_type.js';
|
|
2
|
+
import type { NeverType } from '../never/never_type.js';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Parse `T` to ensure it is either exactly `any` or exactly `never`.
|
|
5
|
+
*
|
|
6
|
+
* 🐾 *parse*
|
|
7
|
+
* 🩳 *shortcut*
|
|
5
8
|
*
|
|
6
9
|
* @example
|
|
7
10
|
* ```ts
|
|
8
|
-
* type R =
|
|
11
|
+
* type R = AnyOrNeverType<any> // any
|
|
12
|
+
* type R = AnyOrNeverType<never> // never
|
|
13
|
+
* type R = AnyOrNeverType<never, 1, 2> // 1
|
|
9
14
|
*
|
|
10
|
-
* type R =
|
|
11
|
-
* type R =
|
|
12
|
-
* type R =
|
|
15
|
+
* type R = AnyOrNeverType<unknown> // never
|
|
16
|
+
* type R = AnyOrNeverType<unknown, 1, 2> // 2
|
|
17
|
+
* type R = AnyOrNeverType<string | boolean> // never
|
|
13
18
|
* ```
|
|
14
19
|
*/
|
|
15
|
-
export type AnyOrNeverType<T, Then = T, Else = never> =
|
|
20
|
+
export type AnyOrNeverType<T, Then = T, Else = never> = NeverType<T, Then, AnyType<T, Then, Else>>;
|
|
16
21
|
/**
|
|
17
|
-
*
|
|
22
|
+
* Validate if `T` is either exactly `any` or exactly `never`.
|
|
23
|
+
*
|
|
24
|
+
* 🎭 *validate*
|
|
25
|
+
* 🩳 *shortcut*
|
|
18
26
|
*
|
|
19
27
|
* @example
|
|
20
28
|
* ```ts
|
|
@@ -25,5 +33,5 @@ export type AnyOrNeverType<T, Then = T, Else = never> = IsNever<T, Then, IsAny<T
|
|
|
25
33
|
* type R = IsAnyOrNever<unknown> // false
|
|
26
34
|
* ```
|
|
27
35
|
*/
|
|
28
|
-
export type IsAnyOrNever<T, Then = true, Else = false> =
|
|
36
|
+
export type IsAnyOrNever<T, Then = true, Else = false> = NeverType<T, Then, AnyType<T, Then, Else>>;
|
|
29
37
|
//# sourceMappingURL=any_or_never_type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"any_or_never_type.d.ts","sourceRoot":"","sources":["../../ts/mix_types/any_or_never_type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"any_or_never_type.d.ts","sourceRoot":"","sources":["../../ts/mix_types/any_or_never_type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAElG;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA"}
|
|
@@ -1,20 +1,28 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { AnyType } from '../any/any_type.js';
|
|
2
|
+
import type { NeverType } from '../never/never_type.js';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Parse `T` to ensure it is either exactly `any` or exactly `never`.
|
|
5
|
+
*
|
|
6
|
+
* 🐾 *parse*
|
|
7
|
+
* 🩳 *shortcut*
|
|
5
8
|
*
|
|
6
9
|
* @example
|
|
7
10
|
* ```ts
|
|
8
|
-
* type R =
|
|
11
|
+
* type R = AnyOrNeverType<any> // any
|
|
12
|
+
* type R = AnyOrNeverType<never> // never
|
|
13
|
+
* type R = AnyOrNeverType<never, 1, 2> // 1
|
|
9
14
|
*
|
|
10
|
-
* type R =
|
|
11
|
-
* type R =
|
|
12
|
-
* type R =
|
|
15
|
+
* type R = AnyOrNeverType<unknown> // never
|
|
16
|
+
* type R = AnyOrNeverType<unknown, 1, 2> // 2
|
|
17
|
+
* type R = AnyOrNeverType<string | boolean> // never
|
|
13
18
|
* ```
|
|
14
19
|
*/
|
|
15
|
-
export type AnyOrNeverType<T, Then = T, Else = never> =
|
|
20
|
+
export type AnyOrNeverType<T, Then = T, Else = never> = NeverType<T, Then, AnyType<T, Then, Else>>;
|
|
16
21
|
/**
|
|
17
|
-
*
|
|
22
|
+
* Validate if `T` is either exactly `any` or exactly `never`.
|
|
23
|
+
*
|
|
24
|
+
* 🎭 *validate*
|
|
25
|
+
* 🩳 *shortcut*
|
|
18
26
|
*
|
|
19
27
|
* @example
|
|
20
28
|
* ```ts
|
|
@@ -25,5 +33,5 @@ export type AnyOrNeverType<T, Then = T, Else = never> = IsNever<T, Then, IsAny<T
|
|
|
25
33
|
* type R = IsAnyOrNever<unknown> // false
|
|
26
34
|
* ```
|
|
27
35
|
*/
|
|
28
|
-
export type IsAnyOrNever<T, Then = true, Else = false> =
|
|
36
|
+
export type IsAnyOrNever<T, Then = true, Else = false> = NeverType<T, Then, AnyType<T, Then, Else>>;
|
|
29
37
|
//# sourceMappingURL=any_or_never_type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"any_or_never_type.d.ts","sourceRoot":"","sources":["../../ts/mix_types/any_or_never_type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"any_or_never_type.d.ts","sourceRoot":"","sources":["../../ts/mix_types/any_or_never_type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAElG;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "type-plus",
|
|
3
|
-
"version": "7.3.
|
|
3
|
+
"version": "7.3.1",
|
|
4
4
|
"description": "Provides additional types for TypeScript.",
|
|
5
|
-
"homepage": "https://github.com/unional/type-plus/tree/main/type-plus",
|
|
5
|
+
"homepage": "https://github.com/unional/type-plus/tree/main/type-plus#readme",
|
|
6
6
|
"bugs": {
|
|
7
7
|
"url": "https://github.com/unional/type-plus/issues"
|
|
8
8
|
},
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
|
-
"url": "https://github.com/unional/type-plus.git"
|
|
11
|
+
"url": "https://github.com/unional/type-plus.git",
|
|
12
|
+
"directory": "type-plus"
|
|
12
13
|
},
|
|
13
14
|
"license": "MIT",
|
|
14
15
|
"author": {
|
package/ts/any/readme.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Any
|
|
2
2
|
|
|
3
|
-
`any` is one of the two top
|
|
3
|
+
`any` is one of the two top types in TypeScript.
|
|
4
|
+
It is a supertype of all types.
|
|
5
|
+
It is a way to opt-out of type checking and let the values pass through compile-time checks.
|
|
4
6
|
|
|
5
7
|
## Type Checking
|
|
6
8
|
|
|
@@ -15,9 +17,24 @@ except `any & never` which is `never`.
|
|
|
15
17
|
- [`NotAnyType<T, Then = T, Else = never>`](any_type.ts#L45): check if `T` is not exactly `any`.
|
|
16
18
|
- [`IsNotAny<T, Then = true, Else = false>`](any_type.ts#L60): is `T` not exactly `any`.
|
|
17
19
|
|
|
18
|
-
##
|
|
20
|
+
## Trivia
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
> Both `any` and `unknown` are top types?
|
|
23
|
+
|
|
24
|
+
Well, yeah:
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
type A = any extends unknown ? 1 : 2 // 1
|
|
28
|
+
type B = unknown extends any ? 1 : 2 // 1
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
> Aren't using `any` is bad?
|
|
32
|
+
|
|
33
|
+
If you use it to simply tell TypeScript to shut up because you are lazy, then yes.
|
|
34
|
+
|
|
35
|
+
But it is ok to use `any` in many cases, as the type system of TypeScript is not sounded.
|
|
36
|
+
|
|
37
|
+
There are many cases it is not possible to induce the type correctly.
|
|
21
38
|
|
|
22
39
|
## References
|
|
23
40
|
|
|
@@ -1,22 +1,30 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { AnyType } from '../any/any_type.js'
|
|
2
|
+
import type { NeverType } from '../never/never_type.js'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Parse `T` to ensure it is either exactly `any` or exactly `never`.
|
|
6
|
+
*
|
|
7
|
+
* 🐾 *parse*
|
|
8
|
+
* 🩳 *shortcut*
|
|
6
9
|
*
|
|
7
10
|
* @example
|
|
8
11
|
* ```ts
|
|
9
|
-
* type R =
|
|
12
|
+
* type R = AnyOrNeverType<any> // any
|
|
13
|
+
* type R = AnyOrNeverType<never> // never
|
|
14
|
+
* type R = AnyOrNeverType<never, 1, 2> // 1
|
|
10
15
|
*
|
|
11
|
-
* type R =
|
|
12
|
-
* type R =
|
|
13
|
-
* type R =
|
|
16
|
+
* type R = AnyOrNeverType<unknown> // never
|
|
17
|
+
* type R = AnyOrNeverType<unknown, 1, 2> // 2
|
|
18
|
+
* type R = AnyOrNeverType<string | boolean> // never
|
|
14
19
|
* ```
|
|
15
20
|
*/
|
|
16
|
-
export type AnyOrNeverType<T, Then = T, Else = never> =
|
|
21
|
+
export type AnyOrNeverType<T, Then = T, Else = never> = NeverType<T, Then, AnyType<T, Then, Else>>
|
|
17
22
|
|
|
18
23
|
/**
|
|
19
|
-
*
|
|
24
|
+
* Validate if `T` is either exactly `any` or exactly `never`.
|
|
25
|
+
*
|
|
26
|
+
* 🎭 *validate*
|
|
27
|
+
* 🩳 *shortcut*
|
|
20
28
|
*
|
|
21
29
|
* @example
|
|
22
30
|
* ```ts
|
|
@@ -27,4 +35,4 @@ export type AnyOrNeverType<T, Then = T, Else = never> = IsNever<T, Then, IsAny<T
|
|
|
27
35
|
* type R = IsAnyOrNever<unknown> // false
|
|
28
36
|
* ```
|
|
29
37
|
*/
|
|
30
|
-
export type IsAnyOrNever<T, Then = true, Else = false> =
|
|
38
|
+
export type IsAnyOrNever<T, Then = true, Else = false> = NeverType<T, Then, AnyType<T, Then, Else>>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Mix Types
|
|
2
|
+
|
|
3
|
+
This folder contains types and utilities that work across multiple types.
|
|
4
|
+
|
|
5
|
+
## [AnyOrNeverType](./any_or_never_type.ts)
|
|
6
|
+
|
|
7
|
+
`AnyOrNeverType<T, Then = T, Else = never>` 🎭 🩳
|
|
8
|
+
|
|
9
|
+
Parse `T` to ensure it is either exactly `any` or exactly `never`.
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import type { AnyOrNeverType } from 'type-plus'
|
|
13
|
+
|
|
14
|
+
type R = AnyOrNeverType<any> // any
|
|
15
|
+
type R = AnyOrNeverType<never> // never
|
|
16
|
+
type R = AnyOrNeverType<never, 1, 2> // 1
|
|
17
|
+
|
|
18
|
+
type R = AnyOrNeverType<unknown, 1, 2> // 2
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## [IsAnyOrNever](./any_or_never_type.ts)
|
|
22
|
+
|
|
23
|
+
`IsAnyOrNever<T, Then = true, Else = false>` 🎭 🩳
|
|
24
|
+
|
|
25
|
+
Validate if `T` is either exactly `any` or exactly `never`.
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import type { IsAnyOrNever } from 'type-plus'
|
|
29
|
+
|
|
30
|
+
type R = IsAnyOrNever<any> // true
|
|
31
|
+
type R = IsAnyOrNever<never> // true
|
|
32
|
+
|
|
33
|
+
type R = IsAnyOrNever<unknown> // false
|
|
34
|
+
```
|