@@ -925,7 +925,7 @@ export const not: <
925
925
R ,
926
926
const P extends Types . PatternPrimitive < R > | Types . PatternBase < R > ,
927
927
Ret ,
928
- Fn extends ( _ : Exclude < R , Types . ExtractMatch < R , Types . PForExclude < P > > > ) => Ret
928
+ Fn extends ( _ : Types . NotMatch < R , P > ) => Ret
929
929
> (
930
930
pattern : P ,
931
931
f : Fn
@@ -956,7 +956,7 @@ export const nonEmptyString: SafeRefinement<string, never> = internal.nonEmptySt
956
956
*/
957
957
export const is : <
958
958
Literals extends ReadonlyArray < string | number | bigint | boolean | null >
959
- > ( ...literals : Literals ) => Predicate . Refinement < unknown , Literals [ number ] > = internal . is
959
+ > ( ...literals : Literals ) => SafeRefinement < Literals [ number ] > = internal . is
960
960
961
961
/**
962
962
* Matches values of type `string`.
@@ -1275,8 +1275,8 @@ export declare namespace Types {
1275
1275
*/
1276
1276
export type WhenMatch < R , P > =
1277
1277
// check for any
1278
- [ 0 ] extends [ 1 & R ] ? PForMatch < P >
1279
- : P extends SafeRefinement < infer SP , never > ? SP
1278
+ [ 0 ] extends [ 1 & R ] ? ResolvePred < P > :
1279
+ P extends SafeRefinement < infer SP , never > ? SP
1280
1280
: P extends Predicate . Refinement < infer _R , infer RP >
1281
1281
// try to narrow refinement
1282
1282
? [ Extract < R , RP > ] extends [ infer X ] ? [ X ] extends [ never ]
@@ -1285,17 +1285,20 @@ export declare namespace Types {
1285
1285
: X
1286
1286
: never
1287
1287
: P extends PredicateA < infer PP > ? PP
1288
- : ExtractMatch < R , PForMatch < P > >
1288
+ : ExtractMatch < R , P >
1289
1289
1290
1290
/**
1291
1291
* @since 1.0.0
1292
1292
*/
1293
- export type NotMatch < R , P > = Exclude < R , ExtractMatch < R , PForExclude < P > > >
1293
+ export type NotMatch < R , P > = Exclude < R , ExtractMatch < R , PForNotMatch < P > > >
1294
+
1295
+ type PForNotMatch < P > = [ ToSafeRefinement < P > ] extends [ infer X ] ? X
1296
+ : never
1294
1297
1295
1298
/**
1296
1299
* @since 1.0.0
1297
1300
*/
1298
- export type PForMatch < P > = [ SafeRefinementP < ResolvePred < P > > ] extends [ infer X ] ? X
1301
+ export type PForMatch < P > = [ ResolvePred < P > ] extends [ infer X ] ? X
1299
1302
: never
1300
1303
1301
1304
/**
@@ -1307,22 +1310,16 @@ export declare namespace Types {
1307
1310
// utilities
1308
1311
type PredicateA < A > = Predicate . Predicate < A > | Predicate . Refinement < A , A >
1309
1312
1310
- type SafeRefinementP < A > = A extends never ? never
1311
- : A extends SafeRefinement < infer S , infer _ > ? S
1312
- : A extends Function ? A
1313
- : A extends Record < string , any > ? { [ K in keyof A ] : SafeRefinementP < A [ K ] > }
1314
- : A
1315
-
1316
1313
type SafeRefinementR < A > = A extends never ? never
1317
1314
: A extends SafeRefinement < infer _ , infer R > ? R
1318
1315
: A extends Function ? A
1319
1316
: A extends Record < string , any > ? { [ K in keyof A ] : SafeRefinementR < A [ K ] > }
1320
1317
: A
1321
1318
1322
1319
type ResolvePred < A > = A extends never ? never
1320
+ : A extends SafeRefinement < infer _A , infer _R > ? _R
1323
1321
: A extends Predicate . Refinement < any , infer P > ? P
1324
1322
: A extends Predicate . Predicate < infer P > ? P
1325
- : A extends SafeRefinement < any > ? A
1326
1323
: A extends Record < string , any > ? { [ K in keyof A ] : ResolvePred < A [ K ] > }
1327
1324
: A
1328
1325
@@ -1433,33 +1430,36 @@ export declare namespace Types {
1433
1430
1434
1431
type Simplify < A > = { [ K in keyof A ] : A [ K ] } & { }
1435
1432
1436
- type ExtractAndNarrow < Input , P > =
1437
- // unknown is a wildcard pattern
1438
- unknown extends P ? Input
1439
- : Input extends infer I ? Exclude <
1440
- I extends ReadonlyArray < any > ? P extends ReadonlyArray < any > ? {
1441
- readonly [ K in keyof I ] : K extends keyof P ? ExtractAndNarrow < I [ K ] , P [ K ] >
1442
- : I [ K ]
1443
- } extends infer R ? Fail extends R [ keyof R ] ? never
1444
- : R
1445
- : never
1433
+ type ExtractAndNarrow < Input , P > = Input extends infer I ?
1434
+ P extends SafeRefinement < infer _In , infer _R > | Predicate . Refinement < infer _In , infer _R > ?
1435
+ P extends SafeRefinement < I & { } , infer _R > | Predicate . Refinement < I & { } , infer _R > ?
1436
+ [ 0 ] extends [ 1 & _R ] ? I : _R
1437
+ : Extract < I , _R > :
1438
+ P extends Predicate . Predicate < infer _In > ? P extends Predicate . Predicate < I & { } > ? _In : never :
1439
+ Exclude <
1440
+ I extends ReadonlyArray < any > ? P extends ReadonlyArray < any > ? {
1441
+ readonly [ K in keyof I ] : K extends keyof P ? ExtractAndNarrow < I [ K ] , P [ K ] >
1442
+ : I [ K ]
1443
+ } extends infer R ? Fail extends R [ keyof R ] ? never
1444
+ : R
1445
+ : never
1446
+ : never
1447
+ : IsPlainObject < I > extends true ? string extends keyof I ? I extends P ? I
1448
+ : never
1449
+ : symbol extends keyof I ? I extends P ? I
1446
1450
: never
1447
- : IsPlainObject < I > extends true ? string extends keyof I ? I extends P ? I
1448
- : never
1449
- : symbol extends keyof I ? I extends P ? I
1450
- : never
1451
- : Simplify <
1452
- & { [ RK in Extract < keyof I , keyof P > ] -?: ExtractAndNarrow < I [ RK ] , P [ RK ] > }
1453
- & Omit < I , keyof P >
1454
- > extends infer R ? keyof P extends NonFailKeys < R > ? R
1455
- : never
1456
- : never
1457
- : MaybeReplace < I , P > extends infer R ? [ I ] extends [ R ] ? I
1458
- : R
1459
- : never ,
1460
- Fail
1461
- > :
1462
- never
1451
+ : Simplify <
1452
+ & { [ RK in Extract < keyof I , keyof P > ] -?: ExtractAndNarrow < I [ RK ] , P [ RK ] > }
1453
+ & Omit < I , keyof P >
1454
+ > extends infer R ? keyof P extends NonFailKeys < R > ? R
1455
+ : never
1456
+ : never
1457
+ : MaybeReplace < I , P > extends infer R ? [ I ] extends [ R ] ? I
1458
+ : R
1459
+ : never ,
1460
+ Fail
1461
+ > :
1462
+ never
1463
1463
1464
1464
type NonFailKeys < A > = keyof A & { } extends infer K ? K extends keyof A ? A [ K ] extends Fail ? never : K
1465
1465
: never :
0 commit comments