@eslinted/core 0.0.1-rc.0 → 0.0.1-rc.1
Sign up to get free protection for your applications and to get access to all the features.
- package/interface/IConfig.d.ts +21 -0
- package/interface/files/IFiles.d.ts +1 -0
- package/interface/option/IOption.d.ts +25 -0
- package/interface/option/language/IOLanguage.d.ts +15 -0
- package/interface/option/language/ecma/IOLanguageEcma.d.ts +20 -0
- package/interface/option/language/globals/IOLanguageGlobals.d.ts +3 -0
- package/interface/option/language/parser/IOLanguageParser.d.ts +3 -0
- package/interface/option/language/parserOptions/IOLanguageParserOptions.d.ts +5 -0
- package/interface/option/language/source/IOLanguageSource.d.ts +12 -0
- package/interface/option/linter/IOLinter.d.ts +30 -0
- package/interface/option/name/IOName.d.ts +3 -0
- package/interface/option/plugins/IOPlugins.d.ts +3 -0
- package/interface/option/processor/IOProcessor.d.ts +3 -0
- package/interface/rules/IRules.d.ts +1 -0
- package/interface/rules/rule/IRule.d.ts +1 -0
- package/interface/rules/rule/state/RuleSeverity.d.ts +5 -0
- package/package.json +2 -2
- package/tsconfig.json +4 -2
- package/types/literal/number/base32.d.ts +19 -0
- package/types/literal/number/base64.d.ts +35 -0
- package/types/literal/number/binary.d.ts +4 -0
- package/types/literal/number/decimal.d.ts +5 -0
- package/types/literal/number/hex.d.ts +10 -0
- package/types/literal/number/octal.d.ts +7 -0
- package/types/literal/number/quatral.d.ts +4 -0
- package/types/literal/number/ternary.d.ts +4 -0
- package/types/literal/string/base64char.d.ts +13 -0
- package/types/literal/string/digit.d.ts +12 -0
- package/types/literal/string/hexchar.d.ts +9 -0
- package/types/literal/string/letter.d.ts +35 -0
- package/types/safe/Safe.d.ts +2 -0
- package/types/safe/numbers/finite/Finite.d.ts +2 -0
- package/types/safe/numbers/finite.d.ts +1 -0
- package/types/safe/numbers/fint.d.ts +1 -0
- package/types/safe/numbers/int/Int.d.ts +2 -0
- package/types/safe/numbers/int.d.ts +1 -0
- package/types/safe/numbers/numberful.d.ts +1 -0
- package/types/safe/numbers/polarity/Negative.d.ts +4 -0
- package/types/safe/numbers/polarity/Positive.d.ts +4 -0
- package/types/safe/numbers/polarity/pole/Pole.d.ts +18 -0
- package/types/safe/primitive.d.ts +5 -0
- package/types/safe/strings/char.d.ts +1 -0
- package/types/safe/strings/length/PropLength.d.ts +3 -0
- package/types/safe/strings/stringful.d.ts +1 -0
- package/types/utility/interface/construct/Particord.d.ts +1 -0
- package/types/utility/interface/construct/Property.d.ts +8 -0
- package/types/utility/interface/construct/Recordful.d.ts +5 -0
- package/types/utility/interface/construct/Table.d.ts +3 -0
- package/types/utility/interface/construct/properties/Field.d.ts +1 -0
- package/types/utility/interface/construct/properties/Flag.d.ts +1 -0
- package/types/utility/interface/construct/properties/Limit.d.ts +8 -0
- package/types/utility/interface/construct/properties/List.d.ts +1 -0
- package/types/utility/interface/construct/properties/Listish.d.ts +1 -0
- package/types/utility/interface/construct/properties/Scalar.d.ts +1 -0
- package/types/utility/interface/construct/tables/FieldTable.d.ts +1 -0
- package/types/utility/interface/construct/tables/FlagTable.d.ts +1 -0
- package/types/utility/interface/construct/tables/ListTable.d.ts +1 -0
- package/types/utility/interface/construct/tables/ListishTable.d.ts +1 -0
- package/types/utility/interface/construct/tables/ScalarTable.d.ts +1 -0
- package/types/utility/interface/identity/Interface.d.ts +80 -0
- package/types/utility/interface/identity/Keys.d.ts +71 -0
- package/types/utility/interface/transform/Unrequire.d.ts +45 -0
- package/types/utility/iterable/construct/ArrayN.d.ts +12 -0
- package/types/utility/iterable/construct/Tuple.d.ts +27 -0
- package/types/utility/iterable/construct/arrays/Arrays.d.ts +1 -0
- package/types/utility/iterable/construct/tuples/Tuples.d.ts +9 -0
- package/types/utility/iterable/identity/DyadType.d.ts +3 -0
- package/types/utility/iterable/identity/MonadType.d.ts +48 -0
- package/types/utility/iterable/identity/TriadType.d.ts +3 -0
- package/types/utility/iterable/identity/array/ArrayType.d.ts +65 -0
- package/types/utility/iterable/identity/array/length/ArrayLength.d.ts +16 -0
- package/types/utility/iterable/transform/Join.d.ts +19 -0
- package/types/utility/iterable/transform/Unflat.d.ts +3 -0
- package/types/utility/iterable/transform/stringarray/Chain.d.ts +30 -0
- package/types/utility/iterable/transform/stringarray/PathN.d.ts +3 -0
- package/types/utility/iterable/transform/stringarray/stringify/Stringify.d.ts +5 -0
- package/types/utility/length/Length.d.ts +35 -0
- package/types/utility/null/null.d.ts +1 -0
- package/types/utility/null/nullable.d.ts +1 -0
- package/types/utility/primitive/Primeval.d.ts +42 -0
- package/types/utility/primitive/boolean/True.d.ts +30 -0
- package/types/utility/primitive/number/Numbered.d.ts +35 -0
- package/types/utility/primitive/string/literal.d.ts +22 -0
- package/types/utility/primitive/string/literalful.d.ts +28 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
declare type Keys<R extends object> = Interface<R> extends never
|
2
|
+
? never
|
3
|
+
: keyof Interface<R>;
|
4
|
+
|
5
|
+
declare namespace Keys {
|
6
|
+
const RESULT: {
|
7
|
+
positive: typeof POSITIVE | 1;
|
8
|
+
negative: typeof NEGATIVE | 0;
|
9
|
+
};
|
10
|
+
|
11
|
+
export const POSITIVE: {
|
12
|
+
T: Keys<{ a: 5 }>;
|
13
|
+
T0: Keys<{
|
14
|
+
a: 1;
|
15
|
+
b?: 2;
|
16
|
+
}>;
|
17
|
+
T1: Keys<{
|
18
|
+
a: 1;
|
19
|
+
b: 2;
|
20
|
+
}>;
|
21
|
+
} extends Record<string, string> ? "PASS" : never;
|
22
|
+
const s: unique symbol;
|
23
|
+
|
24
|
+
export const NEGATIVE: {
|
25
|
+
N: Keys<never>;
|
26
|
+
N0: Keys<{ [s]: 1 }>;
|
27
|
+
N1: Keys<Record<string, 1>>;
|
28
|
+
N1b: Keys<Record<stringful, 1>>;
|
29
|
+
N1c: Keys<Record<"", 1>>;
|
30
|
+
N1d: Keys<Record<number, 1>>;
|
31
|
+
N2: Keys<Record<stringful | "30", 1>>;
|
32
|
+
N2b: Keys<Record<stringful | "", 1>>;
|
33
|
+
N2c: Keys<Record<number | "", 1>>;
|
34
|
+
N2d: Keys<Record<number | "c", 1>>;
|
35
|
+
N2e: Keys<object>;
|
36
|
+
N2f: Keys<{
|
37
|
+
a: 1;
|
38
|
+
[min]: 1;
|
39
|
+
}>;
|
40
|
+
N3: Keys<[]>;
|
41
|
+
N3a: Keys<readonly [1, 1]>;
|
42
|
+
N4: Keys<
|
43
|
+
| {
|
44
|
+
a: 1;
|
45
|
+
b: 1;
|
46
|
+
}
|
47
|
+
| object
|
48
|
+
>;
|
49
|
+
N5: Keys<[1] | { a: 1 }>;
|
50
|
+
N5a: Keys<
|
51
|
+
| {
|
52
|
+
a: 1;
|
53
|
+
b: 1;
|
54
|
+
}
|
55
|
+
| { c: 1 }
|
56
|
+
>;
|
57
|
+
N5b: Keys<
|
58
|
+
| {
|
59
|
+
a: 1;
|
60
|
+
b: 1;
|
61
|
+
}
|
62
|
+
| { c?: 1 }
|
63
|
+
>;
|
64
|
+
|
65
|
+
// N10: Keys<null>;
|
66
|
+
// N10a: Keys<undefined>;
|
67
|
+
// N10b: Keys<void>;
|
68
|
+
// N10c: Keys<unknown>;
|
69
|
+
// N11c: Keys<Record<string | "30", 1>>;
|
70
|
+
} extends Record<string, never> ? "PASS" : never;
|
71
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
declare type Unrequire<R extends object, OK extends string> = Interface<R> extends never
|
2
|
+
? never
|
3
|
+
: literalful<OK> extends never
|
4
|
+
? never
|
5
|
+
: OK extends keyof R
|
6
|
+
? Omit<Interface<R>, literalful<OK>> & Partial<Pick<Interface<R>, literalful<OK>>>
|
7
|
+
: never;
|
8
|
+
|
9
|
+
declare namespace Unrequire {
|
10
|
+
export type T = Unrequire<{
|
11
|
+
a: 1;
|
12
|
+
b: 1;
|
13
|
+
c: 1;
|
14
|
+
}, "c">;
|
15
|
+
export type T1c = "a" extends keyof T ? true : false; // true
|
16
|
+
export type T1b = "b" extends keyof T ? true : false; // true
|
17
|
+
export type T1 = "c" extends keyof T ? true : false; // true
|
18
|
+
export type T2 = {
|
19
|
+
a: 1;
|
20
|
+
b: 1;
|
21
|
+
} extends T ? true : false; // true
|
22
|
+
export type T2b = {
|
23
|
+
a: 1;
|
24
|
+
b: 1;
|
25
|
+
c: 1;
|
26
|
+
} extends T ? true : false; // true
|
27
|
+
export type T2c = {
|
28
|
+
a: 1;
|
29
|
+
b: 1;
|
30
|
+
c: 1;
|
31
|
+
z: 9001;
|
32
|
+
} extends T ? true : false; // true
|
33
|
+
}
|
34
|
+
|
35
|
+
declare namespace NotUnrequire {
|
36
|
+
export type N_null = {
|
37
|
+
a: 1;
|
38
|
+
b: 1;
|
39
|
+
c: 1;
|
40
|
+
} extends Unrequire.T ? true : false; // true
|
41
|
+
export type N = {
|
42
|
+
b: 1;
|
43
|
+
c: 1;
|
44
|
+
} extends Unrequire.T ? true : false; // false
|
45
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
// TODO: constrain to positive integer
|
2
|
+
declare type ArrayN<I, N extends number = 0> = [I] extends [never]
|
3
|
+
? never
|
4
|
+
: N extends number
|
5
|
+
? N extends 0
|
6
|
+
? [...I[]]
|
7
|
+
: ArrayBuilder<I, N>
|
8
|
+
: never;
|
9
|
+
|
10
|
+
type ArrayBuilder<I, N extends number, H extends I[] = []> = H["length"] extends N
|
11
|
+
? [...H, ...I[]]
|
12
|
+
: ArrayBuilder<I, N, [...H, I]>;
|
@@ -0,0 +1,27 @@
|
|
1
|
+
// TODO: constrain to positive integer
|
2
|
+
declare type Tuple<I, N extends number = 2> = [I] extends [never]
|
3
|
+
? never
|
4
|
+
: N extends number
|
5
|
+
? N extends 0
|
6
|
+
? readonly []
|
7
|
+
: TupleBuilder<I, Numbered<N>>
|
8
|
+
: never;
|
9
|
+
|
10
|
+
type TupleBuilder<I, N, H extends readonly I[] = readonly []> = H["length"] extends N
|
11
|
+
? H
|
12
|
+
: TupleBuilder<I, N, readonly [...H, I]>;
|
13
|
+
|
14
|
+
declare namespace Tuple {
|
15
|
+
export type T = Tuple<string>;
|
16
|
+
export type T0 = Tuple<string, 0>;
|
17
|
+
export type T0a = Tuple<string, 1>;
|
18
|
+
export type T0b = Tuple<string, 3>;
|
19
|
+
export type T1 = Tuple<string | number>;
|
20
|
+
export type T2 = Tuple<string, 2 | 3>;
|
21
|
+
export type T3 = Tuple<string | number, 2 | 3>;
|
22
|
+
export type T4 = Tuple<string, never>;
|
23
|
+
export type T4a = Tuple<string, 0>;
|
24
|
+
export type T4b = Tuple<string, 0 | 1>;
|
25
|
+
}
|
26
|
+
|
27
|
+
type NN = Numbered<5 | 10>;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type Arrayful<I> = ArrayN<I, 1>;
|
@@ -0,0 +1,9 @@
|
|
1
|
+
declare type Monad<I> = Tuple<I, 1>;
|
2
|
+
declare type Triad<I> = Tuple<I, 3>;
|
3
|
+
declare type Quad<I> = Tuple<I, 4>;
|
4
|
+
declare type Pentad<I> = Tuple<I, 5>;
|
5
|
+
declare type Hexad<I> = Tuple<I, 6>;
|
6
|
+
declare type Heptad<I> = Tuple<I, 7>;
|
7
|
+
declare type Octad<I> = Tuple<I, 8>;
|
8
|
+
declare type Nonad<I> = Tuple<I, 9>;
|
9
|
+
declare type Decad<I> = Tuple<I, 10>;
|
@@ -0,0 +1,48 @@
|
|
1
|
+
declare type MonadType<A extends readonly unknown[]> = 0 extends ArrayLength<A>
|
2
|
+
? never
|
3
|
+
: ArrayType<A>;
|
4
|
+
|
5
|
+
declare namespace MonadType {
|
6
|
+
export type T0 = MonadType<[1, 1]>;
|
7
|
+
export type T1 = MonadType<readonly [1, 1]>;
|
8
|
+
export type T2 = MonadType<readonly [1, 1?]>;
|
9
|
+
export type T3 = MonadType<readonly [1?, 1?]>;
|
10
|
+
export type T4 = MonadType<readonly [1?, 1?]>;
|
11
|
+
export type T5 = MonadType<[[]]>;
|
12
|
+
export type T6 = MonadType<string[] | int[]>;
|
13
|
+
export type T7 = MonadType<(string | int)[]>;
|
14
|
+
export type T18 = MonadType<[string] | [5, 10]>;
|
15
|
+
export type T8a = MonadType<Tuple<boolean>>;
|
16
|
+
export type T8b = MonadType<ArrayN<string, 3>>;
|
17
|
+
export type T8c = MonadType<
|
18
|
+
| ArrayN<string, 3>
|
19
|
+
| Tuple<boolean>
|
20
|
+
| [string]
|
21
|
+
| [5, 10]
|
22
|
+
| [5, 13]
|
23
|
+
| readonly [5, 10]
|
24
|
+
>;
|
25
|
+
}
|
26
|
+
|
27
|
+
declare namespace NotMonadType {
|
28
|
+
export type N12 = MonadType<never>;
|
29
|
+
export type N26 = MonadType<[]>;
|
30
|
+
export type N27 = MonadType<string[]>;
|
31
|
+
export type N28 = MonadType<readonly []>;
|
32
|
+
export type N29 = MonadType<readonly string[]>;
|
33
|
+
export type N30 = MonadType<[5] | []>;
|
34
|
+
export type N30a = MonadType<[5] | string[]>;
|
35
|
+
export type N30b = MonadType<[5] | readonly []>;
|
36
|
+
export type N30c = MonadType<[5] | readonly string[]>;
|
37
|
+
export type N30d = MonadType<
|
38
|
+
| []
|
39
|
+
| [5, 10]
|
40
|
+
| string []
|
41
|
+
| readonly []
|
42
|
+
| readonly [5, 10]
|
43
|
+
| readonly string[]
|
44
|
+
>;
|
45
|
+
export type N31 = MonadType<ArrayN<string>>;
|
46
|
+
export type N32 = MonadType<[string?]>;
|
47
|
+
export type N33 = MonadType<readonly [string?]>;
|
48
|
+
}
|
@@ -0,0 +1,65 @@
|
|
1
|
+
declare type ArrayType<A> = [A] extends [readonly unknown[]] ? A : never;
|
2
|
+
|
3
|
+
// tests
|
4
|
+
declare namespace ArrayType {
|
5
|
+
export type T0 = ArrayType<[]>;
|
6
|
+
export type T1 = ArrayType<[1, 1]>;
|
7
|
+
export type T2 = ArrayType<string[]>;
|
8
|
+
export type T3 = ArrayType<readonly []>;
|
9
|
+
export type T4 = ArrayType<readonly [1, 1]>;
|
10
|
+
export type T5 = ArrayType<readonly string[]>;
|
11
|
+
export type T6 = ArrayType<[[]]>;
|
12
|
+
export type T7 = ArrayType<string[] | int[]>;
|
13
|
+
export type T8 = ArrayType<(string | int)[]>;
|
14
|
+
export type T9 = ArrayType<
|
15
|
+
| []
|
16
|
+
| [5, 10]
|
17
|
+
| string []
|
18
|
+
| readonly []
|
19
|
+
| readonly [5, 10]
|
20
|
+
| readonly string[]
|
21
|
+
>;
|
22
|
+
export type T10 = ArrayType<[1?, ...string[]]>;
|
23
|
+
export type T11 = ArrayType<[1] | [1, 2?]>;
|
24
|
+
}
|
25
|
+
|
26
|
+
declare namespace NotArrayType {
|
27
|
+
export type N0 = ArrayType<"">;
|
28
|
+
export type N1 = ArrayType<"test">;
|
29
|
+
export type N2 = ArrayType<string>;
|
30
|
+
export type N3 = ArrayType<boolean>;
|
31
|
+
export type N4 = ArrayType<true>;
|
32
|
+
export type N5 = ArrayType<false>;
|
33
|
+
export type N6 = ArrayType<0>;
|
34
|
+
export type N7 = ArrayType<1>;
|
35
|
+
export type N8 = ArrayType<number>;
|
36
|
+
export type N9 = ArrayType<null>;
|
37
|
+
export type N10 = ArrayType<undefined>;
|
38
|
+
export type N11 = ArrayType<unknown>;
|
39
|
+
export type N12 = ArrayType<never>;
|
40
|
+
export type N13 = ArrayType<void>;
|
41
|
+
export type N14 = ArrayType<()=> void>;
|
42
|
+
export type N15 = ArrayType<(a: string)=> []>;
|
43
|
+
export type N16 = ArrayType<Record<string, unknown>>;
|
44
|
+
export type N17 = ArrayType<Record<number, 5>>;
|
45
|
+
export type N18 = ArrayType<stringful>;
|
46
|
+
export type N19 = ArrayType<{ 0: string }>;
|
47
|
+
export type N20 = ArrayType<{
|
48
|
+
0: string;
|
49
|
+
length: 1;
|
50
|
+
}>;
|
51
|
+
export type N21 = ArrayType<symbol>;
|
52
|
+
export type N22 = ArrayType<object>;
|
53
|
+
export type N23 = ArrayType<
|
54
|
+
| []
|
55
|
+
| object
|
56
|
+
>;
|
57
|
+
export type N24 = ArrayType<
|
58
|
+
| []
|
59
|
+
| string
|
60
|
+
>;
|
61
|
+
export type N25 = ArrayType<
|
62
|
+
| []
|
63
|
+
| null
|
64
|
+
>;
|
65
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
declare type ArrayLength<A extends readonly unknown[]> = Length<ArrayType<A>["length"]>;
|
2
|
+
|
3
|
+
declare namespace ArrayLength {
|
4
|
+
export type T0 = ArrayLength<[]>;
|
5
|
+
export type T0a = ArrayLength<string[]>;
|
6
|
+
export type T0b = ArrayLength<readonly []>;
|
7
|
+
export type T0d = ArrayLength<readonly string[]>;
|
8
|
+
export type T0c = ArrayLength<[string?, string?]>;
|
9
|
+
export type T1 = ArrayLength<[string] | [string, string?, string?]>;
|
10
|
+
export type T1b = ArrayLength<[string] | [string?, string?, string?]>; // 0 | 1 | 2 | 3 -- empty Tuple -> length: 0 is just 0, so does not consume other possible lengths
|
11
|
+
export type T1c = ArrayLength<string[] | [string, string, string]>; // 0 -- Array -> length: number coerced to length 0 but consumes all other possible lengths
|
12
|
+
}
|
13
|
+
|
14
|
+
declare namespace NotArrayLength {
|
15
|
+
export type N = ArrayLength<never>;
|
16
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
declare type Join<A extends readonly unknown[], D extends string = string> = ArrayType<A> extends never
|
2
|
+
? never
|
3
|
+
: MonadType<A> extends never
|
4
|
+
? string
|
5
|
+
: MonadType<A> extends readonly (infer I extends string)[]
|
6
|
+
? [I] extends [stringful]
|
7
|
+
? stringful
|
8
|
+
: Extract<I, stringful> extends never
|
9
|
+
? literalful<I> extends never
|
10
|
+
? DyadType<MonadType<A>> extends never
|
11
|
+
? string
|
12
|
+
: literalful<D> extends never
|
13
|
+
? [D] extends [stringful]
|
14
|
+
? stringful
|
15
|
+
: string
|
16
|
+
: stringful
|
17
|
+
: stringful
|
18
|
+
: stringful
|
19
|
+
: never;
|
@@ -0,0 +1,30 @@
|
|
1
|
+
declare type Chain<
|
2
|
+
A extends readonly string[],
|
3
|
+
D extends string = "/",
|
4
|
+
Reverse extends boolean = false,
|
5
|
+
> = literal<D> extends never
|
6
|
+
? never
|
7
|
+
: D extends D
|
8
|
+
? ArrayType<A> extends never
|
9
|
+
? never
|
10
|
+
: ArrayType<A> extends readonly [infer H extends string, ...infer T extends string[]]
|
11
|
+
? ArrayType<T> extends readonly []
|
12
|
+
? literalful<H>
|
13
|
+
: True<Reverse> extends never
|
14
|
+
? `${literalful<H>}${literal<D>}${Chain<ArrayType<T>, literal<D>>}`
|
15
|
+
: `${Chain<ArrayType<T>, literal<D>, True<Reverse>>}${literal<D>}${literalful<H>}`
|
16
|
+
: never
|
17
|
+
: never;
|
18
|
+
|
19
|
+
declare namespace Chain {
|
20
|
+
export type T = Chain<["a", "b", "c"]>;
|
21
|
+
export type T0 = Chain<["a", "b", "c"], "">;
|
22
|
+
export type T0a = Chain<["a", "b", "c"], "-">;
|
23
|
+
export type T1 = Chain<["a", "b", "c"], "/", true>;
|
24
|
+
export type T1a = Chain<["a", "b", "c"], ".", true>;
|
25
|
+
export type T2 = Chain<["a", "b" | "bar", "c"]>;
|
26
|
+
export type T2a = Chain<["a" | "foo", "b" | "bar", "c"]>; // 4
|
27
|
+
export type T3 = Chain<["a", "b", "c"], "." | "/">;
|
28
|
+
export type T4 = Chain<["a" | "foo", "b" | "bar", "c"], "." | "/">; // 8
|
29
|
+
export type T5 = Chain<["a" | "foo", "b" | "bar", "c"], "." | "/", true>; // 8
|
30
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
declare type Length<N extends number> = [N] extends [number]
|
2
|
+
? [number] extends [N]
|
3
|
+
? 0
|
4
|
+
: Numbered<N>
|
5
|
+
: never;
|
6
|
+
|
7
|
+
declare namespace Length {
|
8
|
+
export type T0 = Length<0>;
|
9
|
+
export type T0a = Length<0.0>; // 0
|
10
|
+
export type T0b = Length<number>; // 0
|
11
|
+
export type T1 = Length<1>;
|
12
|
+
export type T1a = Length<1.0>; // 1
|
13
|
+
export type T2 = Length<1.1>; // 1.1
|
14
|
+
export type T3 = Length<1 | 5>; // 1 | 5
|
15
|
+
export type T3b = Length<0 | 1 | 5>; // 0 | 1 | 5
|
16
|
+
}
|
17
|
+
|
18
|
+
declare namespace NotLength {
|
19
|
+
export type N = Length<never>;
|
20
|
+
|
21
|
+
// export type N0 = Length<unknown>;
|
22
|
+
// export type N0a = Length<undefined>;
|
23
|
+
// export type N0b = Length<null>;
|
24
|
+
// export type N0c = Length<void>;
|
25
|
+
// export type N0d = Length<undefined>;
|
26
|
+
// export type N0e = Length<undefined>;
|
27
|
+
// export type N1 = Length<"1">;
|
28
|
+
// export type N1a = Length<true>;
|
29
|
+
// export type N1b = Length<[5, 5]>;
|
30
|
+
// export type N1c = Length<()=> void>;
|
31
|
+
// export type N1d = Length<object>;
|
32
|
+
// export type N2 = Length<null | 1>;
|
33
|
+
// export type N2a = Length<true | 1>;
|
34
|
+
// export type N2b = Length<number | 1>; // 0
|
35
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type Null<T> = null | T;
|
@@ -0,0 +1 @@
|
|
1
|
+
declare type Nullable<T> = Null<NonNullable<T>>;
|
@@ -0,0 +1,42 @@
|
|
1
|
+
declare type Primeval<P extends T, T extends primitive> = [T] extends [primitive]
|
2
|
+
? [P] extends [T]
|
3
|
+
? Extract<P, object> extends never
|
4
|
+
? Exclude<P, T> extends never
|
5
|
+
? T extends P
|
6
|
+
? never
|
7
|
+
: P
|
8
|
+
: never
|
9
|
+
: never
|
10
|
+
: never
|
11
|
+
: never;
|
12
|
+
|
13
|
+
declare namespace Primeval {
|
14
|
+
export type T0 = Primeval<"fast", string>;
|
15
|
+
export type T0a = Primeval<"", string>;
|
16
|
+
export type T0b = Primeval<"fast" | "good", string>;
|
17
|
+
export type T0c = Primeval<"fast" | "", string>;
|
18
|
+
export type T1 = Primeval<5, number>;
|
19
|
+
export type T1a = Primeval<0, number>;
|
20
|
+
export type T2 = Primeval<true, boolean>;
|
21
|
+
export type T2a = Primeval<false, boolean>;
|
22
|
+
}
|
23
|
+
|
24
|
+
declare namespace NotPrimeval {
|
25
|
+
export type N0 = Primeval<string, string>;
|
26
|
+
export type N0a = Primeval<number, number>;
|
27
|
+
export type N0b = Primeval<boolean, boolean>;
|
28
|
+
export type N1 = Primeval<stringful, string>;
|
29
|
+
export type N1b = Primeval<numberful, number>;
|
30
|
+
|
31
|
+
// export type N2 = Primeval<number | 5, number>;
|
32
|
+
// export type N2a = Primeval<string | "good", string>;
|
33
|
+
// export type N2b = Primeval<boolean | true, boolean>;
|
34
|
+
// export type N3 = Primeval<5, number | object>;
|
35
|
+
// export type N3a = Primeval<symbol, symbol>;
|
36
|
+
// export type N3b = Primeval<object, object>;
|
37
|
+
// export type N3c = Primeval<[], readonly unknown[]>;
|
38
|
+
// export type N3d = Primeval<()=> 5, Function>;
|
39
|
+
// export type N3e = Primeval<5, unknown>;
|
40
|
+
// export type N3f = Primeval<true | 10, boolean>;
|
41
|
+
// export type N3g = Primeval<string | "good", string>;
|
42
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
declare type True<B extends boolean> = true extends Primeval<B, boolean>
|
2
|
+
? Primeval<B, boolean>
|
3
|
+
: never;
|
4
|
+
|
5
|
+
declare namespace True {
|
6
|
+
export type T0 = True<true>;
|
7
|
+
}
|
8
|
+
|
9
|
+
declare namespace NotTrue {
|
10
|
+
|
11
|
+
export type N0 = True<never>;
|
12
|
+
export type N1 = True<false>;
|
13
|
+
export type N1a = True<false | true>;
|
14
|
+
export type N1b = True<boolean>;
|
15
|
+
|
16
|
+
// export type N2 = True<true | 10>;
|
17
|
+
// export type N2a = True<true | object>;
|
18
|
+
// export type N2b = True<true | undefined>;
|
19
|
+
// export type N2c = True<true | null>;
|
20
|
+
// export type N2d = True<0>;
|
21
|
+
// export type N2e = True<1>;
|
22
|
+
// export type N2f = True<number>;
|
23
|
+
// export type N2g = True<"">;
|
24
|
+
// export type N2h = True<"true">;
|
25
|
+
// export type N2i = True<"foo">;
|
26
|
+
// export type N2j = True<null>;
|
27
|
+
// export type N2k = True<undefined>;
|
28
|
+
// export type N2l = True<[]>;
|
29
|
+
// export type N2m = True<object>;
|
30
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
declare type Numbered<N extends number> = Primeval<N, number>;
|
2
|
+
|
3
|
+
declare namespace Numbered {
|
4
|
+
export type T0 = Numbered<0>;
|
5
|
+
export type T1 = Numbered<0.0>;
|
6
|
+
export type T2 = Numbered<1>;
|
7
|
+
export type T3 = Numbered<1.0>;
|
8
|
+
export type T4 = Numbered<1.1>;
|
9
|
+
export type T5 = Numbered<1 | 5>;
|
10
|
+
}
|
11
|
+
|
12
|
+
declare namespace NumberedNever {
|
13
|
+
export type N0 = Numbered<number>;
|
14
|
+
export type N0b = Numbered<numberful>;
|
15
|
+
export type N0c = Numbered<number | numberful>;
|
16
|
+
export type N0d = Numbered<1 | numberful>;
|
17
|
+
export type N1 = Numbered<never>;
|
18
|
+
|
19
|
+
// export type N0e = Numbered<1 | number>;
|
20
|
+
// export type N2 = Numbered<"cool">;
|
21
|
+
// export type N3 = Numbered<"NaN">;
|
22
|
+
// export type N4 = Numbered<"5">;
|
23
|
+
// export type N5 = Numbered<string>;
|
24
|
+
// export type N6 = Numbered<boolean>;
|
25
|
+
// export type N6a = Numbered<true>;
|
26
|
+
// export type N6b = Numbered<false>;
|
27
|
+
// export type N7 = Numbered<null>;
|
28
|
+
// export type N8 = Numbered<undefined>;
|
29
|
+
// export type N9 = Numbered<void>;
|
30
|
+
// export type N10 = Numbered<object>;
|
31
|
+
// export type N11 = Numbered<[]>;
|
32
|
+
// export type N12 = Numbered<5 | true>;
|
33
|
+
// export type N13 = Numbered<()=> 5>;
|
34
|
+
// export type N14 = Numbered<symbol>;
|
35
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
declare type literal<S extends string> = Primeval<S, string>;
|
2
|
+
|
3
|
+
declare namespace literal {
|
4
|
+
export type T = literal<"">;
|
5
|
+
export type T0 = literal<"a">;
|
6
|
+
export type T1 = literal<"a" | "b">;
|
7
|
+
export type T1b = literal<"a" | "">;
|
8
|
+
}
|
9
|
+
|
10
|
+
declare namespace Notliteral {
|
11
|
+
export type N = literal<never>;
|
12
|
+
export type N0 = literal<string>;
|
13
|
+
|
14
|
+
// export type N1 = literal<unknown>;
|
15
|
+
// export type N2 = literal<null>;
|
16
|
+
// export type N3 = literal<undefined>;
|
17
|
+
// export type N4 = literal<void>;
|
18
|
+
// export type N5 = literal<object>;
|
19
|
+
// export type N6 = literal<()=> "a">;
|
20
|
+
// export type N7 = literal<symbol>;
|
21
|
+
// export type N8 = literal<"a" | 5>;
|
22
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
declare type literalful<S extends string> = "" extends literal<S>
|
2
|
+
? never
|
3
|
+
: literal<S>;
|
4
|
+
|
5
|
+
declare namespace literalful {
|
6
|
+
export type T0 = literalful<"a">;
|
7
|
+
export type T1 = literalful<"a" | "b">;
|
8
|
+
}
|
9
|
+
|
10
|
+
declare namespace Notliteralful {
|
11
|
+
|
12
|
+
export type N0 = literalful<never>;
|
13
|
+
export type N1 = literalful<"">;
|
14
|
+
export type N2 = literalful<string>;
|
15
|
+
export type N2b = literalful<stringful>;
|
16
|
+
export type N3 = literalful<"" | "a">;
|
17
|
+
|
18
|
+
// export type N5 = literalful<"a" | string>;
|
19
|
+
// export type N5a = literalful<unknown>;
|
20
|
+
// export type N5b = literalful<null>;
|
21
|
+
// export type N5c = literalful<undefined>;
|
22
|
+
// export type N5d = literalful<void>;
|
23
|
+
// export type N5e = literalful<[]>;
|
24
|
+
// export type N5f = literalful<object>;
|
25
|
+
// export type N5g = literalful<()=> "a">;
|
26
|
+
// export type N5h = literalful<symbol>;
|
27
|
+
// export type N5i = literalful<"a" | 5>;
|
28
|
+
}
|