1818
1919import keyBy = require( './index' ) ;
2020
21+ /**
22+ * Dummy interface.
23+ */
2124interface Foo {
2225 /**
2326 * String indicating the name.
@@ -35,10 +38,19 @@ interface Foo {
3538 b ?: number ;
3639}
3740
38- const toKey = ( value : Foo ) => {
41+ /**
42+ * Dummy function.
43+ *
44+ * @param value - input value
45+ * @returns key
46+ */
47+ function toKey ( value : Foo ) : string {
3948 return value . name ;
40- } ;
49+ }
4150
51+ /**
52+ * Dummy object.
53+ */
4254const funcs = {
4355 'count' : 0 ,
4456 'toKey' : function toKey ( this : { count : number ; } , value : Foo ) : string {
@@ -52,9 +64,14 @@ const funcs = {
5264
5365// The function returns an object...
5466{
55- keyBy ( [ { 'name' : 'beep' , 'a' : 1 } , { 'name' : 'boop' , 'b' : 2 } ] , toKey ) ; // $ExpectType Record<string, { name: string; a: number; b?: undefined; } | { name: string; b: number; a?: undefined; }>
56- keyBy ( [ { 'name' : 'beep' , 'a' : 1 } , { 'name' : 'boop' , 'b' : 2 } ] , toKey , { } ) ; // $ExpectType Record<string, { name: string; a: number; b?: undefined; } | { name: string; b: number; a?: undefined; }>
57- keyBy ( [ { 'name' : 'beep' , 'a' : 1 } , { 'name' : 'boop' , 'b' : 2 } ] , funcs . toKey , { 'count' : 0 } ) ; // $ExpectType Record<string, { name: string; a: number; b?: undefined; } | { name: string; b: number; a?: undefined; }>
67+ const arr = [
68+ { 'name' : 'beep' , 'a' : 1 } ,
69+ { 'name' : 'boop' , 'b' : 2 }
70+ ] ;
71+
72+ keyBy ( arr , toKey ) ; // $ExpectType Record<Key, { name: string; a: number; b?: undefined; } | { name: string; b: number; a?: undefined; }>
73+ keyBy ( arr , toKey , { } ) ; // $ExpectType Record<Key, { name: string; a: number; b?: undefined; } | { name: string; b: number; a?: undefined; }>
74+ keyBy ( arr , funcs . toKey , { 'count' : 0 } ) ; // $ExpectType Record<Key, { name: string; a: number; b?: undefined; } | { name: string; b: number; a?: undefined; }>
5875}
5976
6077// The compiler throws an error if the function is provided a first argument which is not a collection...
@@ -67,17 +84,27 @@ const funcs = {
6784
6885// The compiler throws an error if the function is provided a second argument which is not a function...
6986{
70- keyBy ( [ { 'name' : 'beep' , 'a' : 1 } , { 'name' : 'boop' , 'b' : 2 } ] , 2 ) ; // $ExpectError
71- keyBy ( [ { 'name' : 'beep' , 'a' : 1 } , { 'name' : 'boop' , 'b' : 2 } ] , false ) ; // $ExpectError
72- keyBy ( [ { 'name' : 'beep' , 'a' : 1 } , { 'name' : 'boop' , 'b' : 2 } ] , true ) ; // $ExpectError
73- keyBy ( [ { 'name' : 'beep' , 'a' : 1 } , { 'name' : 'boop' , 'b' : 2 } ] , 'abc' ) ; // $ExpectError
74- keyBy ( [ { 'name' : 'beep' , 'a' : 1 } , { 'name' : 'boop' , 'b' : 2 } ] , { } ) ; // $ExpectError
75- keyBy ( [ { 'name' : 'beep' , 'a' : 1 } , { 'name' : 'boop' , 'b' : 2 } ] , [ ] ) ; // $ExpectError
87+ const arr = [
88+ { 'name' : 'beep' , 'a' : 1 } ,
89+ { 'name' : 'boop' , 'b' : 2 }
90+ ] ;
91+
92+ keyBy ( arr , 2 ) ; // $ExpectError
93+ keyBy ( arr , false ) ; // $ExpectError
94+ keyBy ( arr , true ) ; // $ExpectError
95+ keyBy ( arr , 'abc' ) ; // $ExpectError
96+ keyBy ( arr , { } ) ; // $ExpectError
97+ keyBy ( arr , [ ] ) ; // $ExpectError
7698}
7799
78100// The compiler throws an error if the function is provided an invalid number of arguments...
79101{
102+ const arr = [
103+ { 'name' : 'beep' , 'a' : 1 } ,
104+ { 'name' : 'boop' , 'b' : 2 }
105+ ] ;
106+
80107 keyBy ( ) ; // $ExpectError
81- keyBy ( [ { 'name' : 'beep' , 'a' : 1 } , { 'name' : 'boop' , 'b' : 2 } ] ) ; // $ExpectError
82- keyBy ( [ { 'name' : 'beep' , 'a' : 1 } , { 'name' : 'boop' , 'b' : 2 } ] ] , toKey , { } , 3 ) ; // $ExpectError
108+ keyBy ( arr ) ; // $ExpectError
109+ keyBy ( arr , toKey , { } , 3 ) ; // $ExpectError
83110}
0 commit comments