@@ -11,6 +11,7 @@ import is, {
1111 isNullish ,
1212 isNumber ,
1313 isObjectOf ,
14+ isOneOf ,
1415 isRecord ,
1516 isRecordOf ,
1617 isString ,
@@ -32,6 +33,7 @@ Deno.test("is defines aliases of functions", () => {
3233 assertStrictEquals ( is . Null , isNull ) ;
3334 assertStrictEquals ( is . Undefined , isUndefined ) ;
3435 assertStrictEquals ( is . Nullish , isNullish ) ;
36+ assertStrictEquals ( is . OneOf , isOneOf ) ;
3537} ) ;
3638
3739Deno . test ( "isString" , async ( t ) => {
@@ -277,3 +279,27 @@ Deno.test("isNullish", async (t) => {
277279 assertEquals ( isNullish ( function ( ) { } ) , false ) ;
278280 } ) ;
279281} ) ;
282+
283+ Deno . test ( "isOneOf<T>" , async ( t ) => {
284+ await t . step ( "returns true on one of T" , ( ) => {
285+ const preds = [ isNumber , isString , isBoolean ] ;
286+ assertEquals ( isOneOf ( preds ) ( 0 ) , true ) ;
287+ assertEquals ( isOneOf ( preds ) ( "a" ) , true ) ;
288+ assertEquals ( isOneOf ( preds ) ( true ) , true ) ;
289+ } ) ;
290+ await t . step ( "returns false on non of T" , ( ) => {
291+ const preds = [ isNumber , isString , isBoolean ] ;
292+ assertEquals ( isOneOf ( preds ) ( [ ] ) , false ) ;
293+ assertEquals ( isOneOf ( preds ) ( { } ) , false ) ;
294+ assertEquals ( isOneOf ( preds ) ( function ( ) { } ) , false ) ;
295+ assertEquals ( isOneOf ( preds ) ( null ) , false ) ;
296+ assertEquals ( isOneOf ( preds ) ( undefined ) , false ) ;
297+ } ) ;
298+ await t . step ( "returns proper type predicate" , ( ) => {
299+ const preds = [ isNumber , isString , isBoolean ] ;
300+ const a : unknown = [ 0 , "a" , true ] ;
301+ if ( isOneOf ( preds ) ( a ) ) {
302+ const _ : number | string | boolean = a ;
303+ }
304+ } ) ;
305+ } ) ;
0 commit comments