7
7
import * as Equivalence from "./Equivalence.js"
8
8
import { dual } from "./Function.js"
9
9
import * as order from "./Order.js"
10
+ import * as Predicate from "./Predicate.js"
10
11
import type { MatchRecord , Simplify } from "./Types.js"
11
12
12
13
/**
@@ -17,23 +18,32 @@ import type { MatchRecord, Simplify } from "./Types.js"
17
18
* import { pipe } from "effect/Function"
18
19
*
19
20
* assert.deepStrictEqual(pipe({ a: "a", b: 1, c: true }, pick("a", "b")), { a: "a", b: 1 })
21
+ * assert.deepStrictEqual(pick({ a: "a", b: 1, c: true }, "a", "b"), { a: "a", b: 1 })
20
22
*
21
23
* @since 2.0.0
22
24
*/
23
- export const pick = < Keys extends Array < PropertyKey > > (
24
- ...keys : Keys
25
- ) =>
26
- < S extends { [ K in Keys [ number ] ] ?: any } > (
27
- s : S
28
- ) : MatchRecord < S , { [ K in Keys [ number ] ] ?: S [ K ] } , Simplify < Pick < S , Keys [ number ] > > > => {
29
- const out : any = { }
30
- for ( const k of keys ) {
31
- if ( k in s ) {
32
- out [ k ] = ( s as any ) [ k ]
25
+ export const pick : {
26
+ < Keys extends Array < PropertyKey > > (
27
+ ...keys : Keys
28
+ ) : < S extends { [ K in Keys [ number ] ] ?: any } > (
29
+ s : S
30
+ ) => MatchRecord < S , { [ K in Keys [ number ] ] ?: S [ K ] } , Simplify < Pick < S , Keys [ number ] > > >
31
+ < S extends object , Keys extends Array < keyof S > > (
32
+ s : S ,
33
+ ...keys : Keys
34
+ ) : MatchRecord < S , { [ K in Keys [ number ] ] ?: S [ K ] } , Simplify < Pick < S , Keys [ number ] > > >
35
+ } = dual (
36
+ ( args ) => Predicate . isObject ( args [ 0 ] ) ,
37
+ < S extends object , Keys extends Array < keyof S > > ( s : S , ...keys : Keys ) => {
38
+ const out : any = { }
39
+ for ( const k of keys ) {
40
+ if ( k in s ) {
41
+ out [ k ] = ( s as any ) [ k ]
42
+ }
33
43
}
44
+ return out
34
45
}
35
- return out
36
- }
46
+ )
37
47
38
48
/**
39
49
* Create a new object by omitting properties of an existing object.
@@ -43,19 +53,28 @@ export const pick = <Keys extends Array<PropertyKey>>(
43
53
* import { pipe } from "effect/Function"
44
54
*
45
55
* assert.deepStrictEqual(pipe({ a: "a", b: 1, c: true }, omit("c")), { a: "a", b: 1 })
56
+ * assert.deepStrictEqual(omit({ a: "a", b: 1, c: true }, "c"), { a: "a", b: 1 })
46
57
*
47
58
* @since 2.0.0
48
59
*/
49
- export const omit = < Keys extends Array < PropertyKey > > (
50
- ...keys : Keys
51
- ) =>
52
- < S extends { [ K in Keys [ number ] ] ?: any } > ( s : S ) : Simplify < Omit < S , Keys [ number ] > > => {
53
- const out : any = { ...s }
54
- for ( const k of keys ) {
55
- delete out [ k ]
60
+ export const omit : {
61
+ < Keys extends Array < PropertyKey > > (
62
+ ...keys : Keys
63
+ ) : < S extends { [ K in Keys [ number ] ] ?: any } > ( s : S ) => Simplify < Omit < S , Keys [ number ] > >
64
+ < S extends object , Keys extends Array < keyof S > > (
65
+ s : S ,
66
+ ...keys : Keys
67
+ ) : Simplify < Omit < S , Keys [ number ] > >
68
+ } = dual (
69
+ ( args ) => Predicate . isObject ( args [ 0 ] ) ,
70
+ < S extends object , Keys extends Array < keyof S > > ( s : S , ...keys : Keys ) => {
71
+ const out : any = { ...s }
72
+ for ( const k of keys ) {
73
+ delete out [ k ]
74
+ }
75
+ return out
56
76
}
57
- return out
58
- }
77
+ )
59
78
60
79
/**
61
80
* Given a struct of `Equivalence`s returns a new `Equivalence` that compares values of a struct
0 commit comments