├── .gitignore ├── .npmignore ├── lib ├── ctor-args.ts ├── index.ts ├── pick-range.ts ├── pick-rangen.ts ├── pick.ts ├── post-argn.ts ├── post.ts ├── pre-argn.ts ├── pre.ts ├── replace-return.ts ├── test.ts └── utils.ts ├── package.json ├── readme.md └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /package-lock.json 3 | /.vscode 4 | /temp 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | temp 2 | node_modules 3 | .vscode 4 | lib/test.ts -------------------------------------------------------------------------------- /lib/ctor-args.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * ```ts 3 | * class A { 4 | * constructor( 5 | * public x: number, 6 | * public y: string, 7 | * public z: boolean, 8 | * ) {} 9 | * } 10 | * 11 | * const args: CtorArgs = [ 123, 'hello', false ]; 12 | * ``` 13 | */ 14 | export type CtorArgs any> = CtorT extends new (...args: infer K) => any ? K : never; 15 | export type CtorArgsI any, I extends number> = CtorArgs[I]; -------------------------------------------------------------------------------- /lib/index.ts: -------------------------------------------------------------------------------- 1 | export * from './pick'; 2 | export * from './pre'; 3 | export * from './pre-argn'; 4 | export * from './post'; 5 | export * from './post-argn'; 6 | export * from './pick-range'; 7 | export * from './utils'; 8 | export * from './pick-rangen'; 9 | export * from './replace-return'; 10 | export * from './ctor-args'; -------------------------------------------------------------------------------- /lib/pick-range.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Arg1, 3 | Arg2, 4 | Arg3, 5 | Arg4, 6 | Arg5, 7 | Arg6, 8 | Arg7, 9 | Arg8, 10 | Arg9, 11 | Arg10, 12 | } from "./pick"; 13 | 14 | export type Args10 = [ 15 | Arg1, 16 | Arg2, 17 | Arg3, 18 | Arg4, 19 | Arg5, 20 | Arg6, 21 | Arg7, 22 | Arg8, 23 | Arg9, 24 | Arg10 25 | ]; 26 | 27 | /* 28 | 29 | Generator: 30 | 31 | function gen(num, offset) { 32 | function rep(str, p, from, to) { 33 | const l = []; 34 | for (let i = from; i < to; ++i) { 35 | l.push(` ${str}${i}${p}`); 36 | } 37 | return l.join(',\n'); 38 | } 39 | 40 | return ` 41 | export type Args${num}off${offset-1} = [ 42 | ${rep('Arg', '', offset, offset + num)} 43 | ];`; 44 | } 45 | 46 | var resl = []; 47 | for (let i = 2; i <= 10; ++i) { 48 | for (let j = 1; j < 11-i; ++j) { 49 | resl.push(gen(i, j)); 50 | } 51 | } 52 | resl.join('\n\n'); 53 | 54 | */ 55 | 56 | export type Args2off0 = [ 57 | Arg1, 58 | Arg2 59 | ]; 60 | 61 | export type Args2off1 = [ 62 | Arg2, 63 | Arg3 64 | ]; 65 | 66 | export type Args2off2 = [ 67 | Arg3, 68 | Arg4 69 | ]; 70 | 71 | export type Args2off3 = [ 72 | Arg4, 73 | Arg5 74 | ]; 75 | 76 | export type Args2off4 = [ 77 | Arg5, 78 | Arg6 79 | ]; 80 | 81 | export type Args2off5 = [ 82 | Arg6, 83 | Arg7 84 | ]; 85 | 86 | export type Args2off6 = [ 87 | Arg7, 88 | Arg8 89 | ]; 90 | 91 | export type Args2off7 = [ 92 | Arg8, 93 | Arg9 94 | ]; 95 | 96 | export type Args3off0 = [ 97 | Arg1, 98 | Arg2, 99 | Arg3 100 | ]; 101 | 102 | export type Args3off1 = [ 103 | Arg2, 104 | Arg3, 105 | Arg4 106 | ]; 107 | 108 | export type Args3off2 = [ 109 | Arg3, 110 | Arg4, 111 | Arg5 112 | ]; 113 | 114 | export type Args3off3 = [ 115 | Arg4, 116 | Arg5, 117 | Arg6 118 | ]; 119 | 120 | export type Args3off4 = [ 121 | Arg5, 122 | Arg6, 123 | Arg7 124 | ]; 125 | 126 | export type Args3off5 = [ 127 | Arg6, 128 | Arg7, 129 | Arg8 130 | ]; 131 | 132 | export type Args3off6 = [ 133 | Arg7, 134 | Arg8, 135 | Arg9 136 | ]; 137 | 138 | export type Args4off0 = [ 139 | Arg1, 140 | Arg2, 141 | Arg3, 142 | Arg4 143 | ]; 144 | 145 | export type Args4off1 = [ 146 | Arg2, 147 | Arg3, 148 | Arg4, 149 | Arg5 150 | ]; 151 | 152 | export type Args4off2 = [ 153 | Arg3, 154 | Arg4, 155 | Arg5, 156 | Arg6 157 | ]; 158 | 159 | export type Args4off3 = [ 160 | Arg4, 161 | Arg5, 162 | Arg6, 163 | Arg7 164 | ]; 165 | 166 | export type Args4off4 = [ 167 | Arg5, 168 | Arg6, 169 | Arg7, 170 | Arg8 171 | ]; 172 | 173 | export type Args4off5 = [ 174 | Arg6, 175 | Arg7, 176 | Arg8, 177 | Arg9 178 | ]; 179 | 180 | export type Args5off0 = [ 181 | Arg1, 182 | Arg2, 183 | Arg3, 184 | Arg4, 185 | Arg5 186 | ]; 187 | 188 | export type Args5off1 = [ 189 | Arg2, 190 | Arg3, 191 | Arg4, 192 | Arg5, 193 | Arg6 194 | ]; 195 | 196 | export type Args5off2 = [ 197 | Arg3, 198 | Arg4, 199 | Arg5, 200 | Arg6, 201 | Arg7 202 | ]; 203 | 204 | export type Args5off3 = [ 205 | Arg4, 206 | Arg5, 207 | Arg6, 208 | Arg7, 209 | Arg8 210 | ]; 211 | 212 | export type Args5off4 = [ 213 | Arg5, 214 | Arg6, 215 | Arg7, 216 | Arg8, 217 | Arg9 218 | ]; 219 | 220 | export type Args6off0 = [ 221 | Arg1, 222 | Arg2, 223 | Arg3, 224 | Arg4, 225 | Arg5, 226 | Arg6 227 | ]; 228 | 229 | export type Args6off1 = [ 230 | Arg2, 231 | Arg3, 232 | Arg4, 233 | Arg5, 234 | Arg6, 235 | Arg7 236 | ]; 237 | 238 | export type Args6off2 = [ 239 | Arg3, 240 | Arg4, 241 | Arg5, 242 | Arg6, 243 | Arg7, 244 | Arg8 245 | ]; 246 | 247 | export type Args6off3 = [ 248 | Arg4, 249 | Arg5, 250 | Arg6, 251 | Arg7, 252 | Arg8, 253 | Arg9 254 | ]; 255 | 256 | export type Args7off0 = [ 257 | Arg1, 258 | Arg2, 259 | Arg3, 260 | Arg4, 261 | Arg5, 262 | Arg6, 263 | Arg7 264 | ]; 265 | 266 | export type Args7off1 = [ 267 | Arg2, 268 | Arg3, 269 | Arg4, 270 | Arg5, 271 | Arg6, 272 | Arg7, 273 | Arg8 274 | ]; 275 | 276 | export type Args7off2 = [ 277 | Arg3, 278 | Arg4, 279 | Arg5, 280 | Arg6, 281 | Arg7, 282 | Arg8, 283 | Arg9 284 | ]; 285 | 286 | export type Args8off0 = [ 287 | Arg1, 288 | Arg2, 289 | Arg3, 290 | Arg4, 291 | Arg5, 292 | Arg6, 293 | Arg7, 294 | Arg8 295 | ]; 296 | 297 | export type Args8off1 = [ 298 | Arg2, 299 | Arg3, 300 | Arg4, 301 | Arg5, 302 | Arg6, 303 | Arg7, 304 | Arg8, 305 | Arg9 306 | ]; 307 | 308 | export type Args9off0 = [ 309 | Arg1, 310 | Arg2, 311 | Arg3, 312 | Arg4, 313 | Arg5, 314 | Arg6, 315 | Arg7, 316 | Arg8, 317 | Arg9 318 | ]; -------------------------------------------------------------------------------- /lib/pick-rangen.ts: -------------------------------------------------------------------------------- 1 | import { Args10, Args9off0, Args8off0, Args7off0, Args6off0, Args5off0, Args4off0, Args3off0, Args2off0, } from "./pick-range"; 2 | import { Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10 } from "./pick"; 3 | import { IfExtends } from "./utils"; 4 | 5 | // tslint:disable 6 | /** 7 | * `T` - Method 8 | * `NoArgs` - Type used when no args found 9 | * `ManyArgs` - Type used when 10+ args found 10 | */ 11 | export type ArgsN_Old< 12 | T extends Function, 13 | NoArgs = [], 14 | ManyArgs = Args10, 15 | > = 16 | IfExtends any, NoArgs, 17 | IfExtends) => any, [Arg1], 18 | IfExtends, arg2: Arg2) => any, Args2off0, 19 | IfExtends, arg2: Arg2, arg3: Arg3) => any, Args3off0, 20 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4) => any, Args4off0, 21 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5) => any, Args5off0, 22 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6) => any, Args6off0, 23 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7) => any, Args7off0, 24 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8) => any, Args8off0, 25 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9) => any, Args9off0, 26 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9, arg10: Arg10) => any, Args10, ManyArgs 27 | >>>>>>>>>>>; 28 | 29 | export type ArgsN any> = T extends (...args: infer K) => any ? K : never; 30 | export type ArgsNum any> = T extends (...args: infer K) => any ? K["length"] : never; 31 | 32 | export type Args any> = ArgsN; -------------------------------------------------------------------------------- /lib/pick.ts: -------------------------------------------------------------------------------- 1 | import { IfExtends } from "./utils"; 2 | 3 | export type ArgI = T extends (...args: infer K) => any ? IfExtends : never; 4 | 5 | export type Arg1 = T extends (arg1: infer U, ...args: any[]) => any ? U : undefined; 6 | export type Arg2 = T extends (arg1: any, arg2: infer U, ...args: any[]) => any ? U : undefined; 7 | export type Arg3 = T extends (arg1: any, arg2: any, arg3: infer U, ...args: any[]) => any ? U : undefined; 8 | export type Arg4 = T extends (arg1: any, arg2: any, arg3: any, arg4: infer U, ...args: any[]) => any ? U : undefined; 9 | export type Arg5 = T extends (arg1: any, arg2: any, arg3: any, arg4: any, arg5: infer U, ...args: any[]) => any ? U : undefined; 10 | export type Arg6 = T extends (arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: infer U, ...args: any[]) => any ? U : undefined; 11 | export type Arg7 = T extends (arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: infer U, ...args: any[]) => any ? U : undefined; 12 | export type Arg8 = T extends (arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: any, arg8: infer U, ...args: any[]) => any ? U : undefined; 13 | export type Arg9 = T extends (arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: any, arg8: any, arg9: infer U, ...args: any[]) => any ? U : undefined; 14 | export type Arg10 = T extends (arg1: any, arg2: any, arg3: any, arg4: any, arg5: any, arg6: any, arg7: any, arg8: any, arg9: any, arg10: infer U, ...args: any[]) => any ? U : undefined; -------------------------------------------------------------------------------- /lib/post-argn.ts: -------------------------------------------------------------------------------- 1 | import * as post from './post'; 2 | import { Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10 } from "./pick"; 3 | import { IfExtends } from "./utils"; 4 | 5 | // tslint:disable 6 | 7 | /* 8 | 9 | Generator: 10 | 11 | function repeat(prefix, n) { 12 | var a = []; 13 | for (let i = 1; i <= n; ++i) a.push(`${prefix}${i}`); 14 | return a.join(', '); 15 | } 16 | 17 | function args(prefix, type, typePrefix, n, post='') { 18 | var a = []; 19 | for (let i = 1; i <= n; ++i) a.push(`${prefix}${i}: ${type || typePrefix + i}${post}`); 20 | return a.join(', '); 21 | } 22 | 23 | function genX(n) { 24 | return `export type Post${n}ArgN<${repeat('Post', n)}, T extends (...args: any[]) => any> = 25 | IfExtends any, (${args('post', undefined, 'Post', n)}) => ReturnType, 26 | IfExtends) => any, post.Post${n}Arg1<${repeat('Post', n)}, T>, 27 | IfExtends, arg2: Arg2) => any, post.Post${n}Arg2<${repeat('Post', n)}, T>, 28 | IfExtends, arg2: Arg2, arg3: Arg3) => any, post.Post${n}Arg3<${repeat('Post', n)}, T>, 29 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4) => any, post.Post${n}Arg4<${repeat('Post', n)}, T>, 30 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5) => any, post.Post${n}Arg5<${repeat('Post', n)}, T>, 31 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6) => any, post.Post${n}Arg6<${repeat('Post', n)}, T>, 32 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7) => any, post.Post${n}Arg7<${repeat('Post', n)}, T>, 33 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8) => any, post.Post${n}Arg8<${repeat('Post', n)}, T>, 34 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9) => any, post.Post${n}Arg9<${repeat('Post', n)}, T>, 35 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9, arg10: Arg10) => any, post.Post${n}Arg10<${repeat('Post', n)}, T>, (...args: any[]) => ReturnType 36 | >>>>>>>>>>>`; 37 | } 38 | 39 | function gen() { 40 | var result = []; 41 | for (let i = 1; i <= 10; ++i) { 42 | result.push(genX(i)); 43 | } 44 | return result.join('\n'); 45 | } 46 | 47 | */ 48 | export type Post1ArgN any> = 49 | IfExtends any, (post1: Post1) => ReturnType, 50 | IfExtends) => any, post.Post1Arg1, 51 | IfExtends, arg2: Arg2) => any, post.Post1Arg2, 52 | IfExtends, arg2: Arg2, arg3: Arg3) => any, post.Post1Arg3, 53 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4) => any, post.Post1Arg4, 54 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5) => any, post.Post1Arg5, 55 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6) => any, post.Post1Arg6, 56 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7) => any, post.Post1Arg7, 57 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8) => any, post.Post1Arg8, 58 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9) => any, post.Post1Arg9, 59 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9, arg10: Arg10) => any, post.Post1Arg10, (...args: any[]) => ReturnType 60 | >>>>>>>>>>> 61 | export type Post2ArgN any> = 62 | IfExtends any, (post1: Post1, post2: Post2) => ReturnType, 63 | IfExtends) => any, post.Post2Arg1, 64 | IfExtends, arg2: Arg2) => any, post.Post2Arg2, 65 | IfExtends, arg2: Arg2, arg3: Arg3) => any, post.Post2Arg3, 66 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4) => any, post.Post2Arg4, 67 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5) => any, post.Post2Arg5, 68 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6) => any, post.Post2Arg6, 69 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7) => any, post.Post2Arg7, 70 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8) => any, post.Post2Arg8, 71 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9) => any, post.Post2Arg9, 72 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9, arg10: Arg10) => any, post.Post2Arg10, (...args: any[]) => ReturnType 73 | >>>>>>>>>>> 74 | export type Post3ArgN any> = 75 | IfExtends any, (post1: Post1, post2: Post2, post3: Post3) => ReturnType, 76 | IfExtends) => any, post.Post3Arg1, 77 | IfExtends, arg2: Arg2) => any, post.Post3Arg2, 78 | IfExtends, arg2: Arg2, arg3: Arg3) => any, post.Post3Arg3, 79 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4) => any, post.Post3Arg4, 80 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5) => any, post.Post3Arg5, 81 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6) => any, post.Post3Arg6, 82 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7) => any, post.Post3Arg7, 83 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8) => any, post.Post3Arg8, 84 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9) => any, post.Post3Arg9, 85 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9, arg10: Arg10) => any, post.Post3Arg10, (...args: any[]) => ReturnType 86 | >>>>>>>>>>> 87 | export type Post4ArgN any> = 88 | IfExtends any, (post1: Post1, post2: Post2, post3: Post3, post4: Post4) => ReturnType, 89 | IfExtends) => any, post.Post4Arg1, 90 | IfExtends, arg2: Arg2) => any, post.Post4Arg2, 91 | IfExtends, arg2: Arg2, arg3: Arg3) => any, post.Post4Arg3, 92 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4) => any, post.Post4Arg4, 93 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5) => any, post.Post4Arg5, 94 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6) => any, post.Post4Arg6, 95 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7) => any, post.Post4Arg7, 96 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8) => any, post.Post4Arg8, 97 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9) => any, post.Post4Arg9, 98 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9, arg10: Arg10) => any, post.Post4Arg10, (...args: any[]) => ReturnType 99 | >>>>>>>>>>> 100 | export type Post5ArgN any> = 101 | IfExtends any, (post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5) => ReturnType, 102 | IfExtends) => any, post.Post5Arg1, 103 | IfExtends, arg2: Arg2) => any, post.Post5Arg2, 104 | IfExtends, arg2: Arg2, arg3: Arg3) => any, post.Post5Arg3, 105 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4) => any, post.Post5Arg4, 106 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5) => any, post.Post5Arg5, 107 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6) => any, post.Post5Arg6, 108 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7) => any, post.Post5Arg7, 109 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8) => any, post.Post5Arg8, 110 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9) => any, post.Post5Arg9, 111 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9, arg10: Arg10) => any, post.Post5Arg10, (...args: any[]) => ReturnType 112 | >>>>>>>>>>> 113 | export type Post6ArgN any> = 114 | IfExtends any, (post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6) => ReturnType, 115 | IfExtends) => any, post.Post6Arg1, 116 | IfExtends, arg2: Arg2) => any, post.Post6Arg2, 117 | IfExtends, arg2: Arg2, arg3: Arg3) => any, post.Post6Arg3, 118 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4) => any, post.Post6Arg4, 119 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5) => any, post.Post6Arg5, 120 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6) => any, post.Post6Arg6, 121 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7) => any, post.Post6Arg7, 122 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8) => any, post.Post6Arg8, 123 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9) => any, post.Post6Arg9, 124 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9, arg10: Arg10) => any, post.Post6Arg10, (...args: any[]) => ReturnType 125 | >>>>>>>>>>> 126 | export type Post7ArgN any> = 127 | IfExtends any, (post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7) => ReturnType, 128 | IfExtends) => any, post.Post7Arg1, 129 | IfExtends, arg2: Arg2) => any, post.Post7Arg2, 130 | IfExtends, arg2: Arg2, arg3: Arg3) => any, post.Post7Arg3, 131 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4) => any, post.Post7Arg4, 132 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5) => any, post.Post7Arg5, 133 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6) => any, post.Post7Arg6, 134 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7) => any, post.Post7Arg7, 135 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8) => any, post.Post7Arg8, 136 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9) => any, post.Post7Arg9, 137 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9, arg10: Arg10) => any, post.Post7Arg10, (...args: any[]) => ReturnType 138 | >>>>>>>>>>> 139 | export type Post8ArgN any> = 140 | IfExtends any, (post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8) => ReturnType, 141 | IfExtends) => any, post.Post8Arg1, 142 | IfExtends, arg2: Arg2) => any, post.Post8Arg2, 143 | IfExtends, arg2: Arg2, arg3: Arg3) => any, post.Post8Arg3, 144 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4) => any, post.Post8Arg4, 145 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5) => any, post.Post8Arg5, 146 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6) => any, post.Post8Arg6, 147 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7) => any, post.Post8Arg7, 148 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8) => any, post.Post8Arg8, 149 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9) => any, post.Post8Arg9, 150 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9, arg10: Arg10) => any, post.Post8Arg10, (...args: any[]) => ReturnType 151 | >>>>>>>>>>> 152 | export type Post9ArgN any> = 153 | IfExtends any, (post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9) => ReturnType, 154 | IfExtends) => any, post.Post9Arg1, 155 | IfExtends, arg2: Arg2) => any, post.Post9Arg2, 156 | IfExtends, arg2: Arg2, arg3: Arg3) => any, post.Post9Arg3, 157 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4) => any, post.Post9Arg4, 158 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5) => any, post.Post9Arg5, 159 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6) => any, post.Post9Arg6, 160 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7) => any, post.Post9Arg7, 161 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8) => any, post.Post9Arg8, 162 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9) => any, post.Post9Arg9, 163 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9, arg10: Arg10) => any, post.Post9Arg10, (...args: any[]) => ReturnType 164 | >>>>>>>>>>> 165 | export type Post10ArgN any> = 166 | IfExtends any, (post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9, post10: Post10) => ReturnType, 167 | IfExtends) => any, post.Post10Arg1, 168 | IfExtends, arg2: Arg2) => any, post.Post10Arg2, 169 | IfExtends, arg2: Arg2, arg3: Arg3) => any, post.Post10Arg3, 170 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4) => any, post.Post10Arg4, 171 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5) => any, post.Post10Arg5, 172 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6) => any, post.Post10Arg6, 173 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7) => any, post.Post10Arg7, 174 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8) => any, post.Post10Arg8, 175 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9) => any, post.Post10Arg9, 176 | IfExtends, arg2: Arg2, arg3: Arg3, arg4: Arg4, arg5: Arg5, arg6: Arg6, arg7: Arg7, arg8: Arg8, arg9: Arg9, arg10: Arg10) => any, post.Post10Arg10, (...args: any[]) => ReturnType 177 | >>>>>>>>>>> -------------------------------------------------------------------------------- /lib/post.ts: -------------------------------------------------------------------------------- 1 | import * as pick from './pick'; 2 | 3 | // tslint:disable 4 | 5 | /* 6 | 7 | Generator: 8 | 9 | function args(prefix, type, typePrefix, n, post='') { 10 | var a = []; 11 | for (let i = 1; i <= n; ++i) a.push(`${prefix}${i}: ${type || typePrefix + i}${post}`); 12 | return a.join(', '); 13 | } 14 | 15 | function repeat(prefix, n) { 16 | var a = []; 17 | for (let i = 1; i <= n; ++i) a.push(`${prefix}${i}`); 18 | return a.join(', '); 19 | } 20 | 21 | function gen() { 22 | var result = []; 23 | for (let ipre = 1; ipre <= 10; ++ipre) { 24 | for (let iarg = 1; iarg <= 10; ++iarg) { 25 | result.push(`export type Post${ipre}Arg${iarg}<${repeat('Post', ipre)}, T extends (...args: any[]) => any> = (${args('arg', undefined, 'Arg', iarg, '')}, ${args('post', undefined, 'Post', ipre)}) => ReturnType;`); 26 | } 27 | } 28 | return result.join('\n'); 29 | } 30 | 31 | */ 32 | 33 | export type Post1Arg1 any> = (arg1: pick.Arg1, post1: Post1) => ReturnType; 34 | export type Post1Arg2 any> = (arg1: pick.Arg1, arg2: pick.Arg2, post1: Post1) => ReturnType; 35 | export type Post1Arg3 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, post1: Post1) => ReturnType; 36 | export type Post1Arg4 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, post1: Post1) => ReturnType; 37 | export type Post1Arg5 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, post1: Post1) => ReturnType; 38 | export type Post1Arg6 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, post1: Post1) => ReturnType; 39 | export type Post1Arg7 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, post1: Post1) => ReturnType; 40 | export type Post1Arg8 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, post1: Post1) => ReturnType; 41 | export type Post1Arg9 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, post1: Post1) => ReturnType; 42 | export type Post1Arg10 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10, post1: Post1) => ReturnType; 43 | export type Post2Arg1 any> = (arg1: pick.Arg1, post1: Post1, post2: Post2) => ReturnType; 44 | export type Post2Arg2 any> = (arg1: pick.Arg1, arg2: pick.Arg2, post1: Post1, post2: Post2) => ReturnType; 45 | export type Post2Arg3 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, post1: Post1, post2: Post2) => ReturnType; 46 | export type Post2Arg4 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, post1: Post1, post2: Post2) => ReturnType; 47 | export type Post2Arg5 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, post1: Post1, post2: Post2) => ReturnType; 48 | export type Post2Arg6 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, post1: Post1, post2: Post2) => ReturnType; 49 | export type Post2Arg7 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, post1: Post1, post2: Post2) => ReturnType; 50 | export type Post2Arg8 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, post1: Post1, post2: Post2) => ReturnType; 51 | export type Post2Arg9 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, post1: Post1, post2: Post2) => ReturnType; 52 | export type Post2Arg10 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10, post1: Post1, post2: Post2) => ReturnType; 53 | export type Post3Arg1 any> = (arg1: pick.Arg1, post1: Post1, post2: Post2, post3: Post3) => ReturnType; 54 | export type Post3Arg2 any> = (arg1: pick.Arg1, arg2: pick.Arg2, post1: Post1, post2: Post2, post3: Post3) => ReturnType; 55 | export type Post3Arg3 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, post1: Post1, post2: Post2, post3: Post3) => ReturnType; 56 | export type Post3Arg4 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, post1: Post1, post2: Post2, post3: Post3) => ReturnType; 57 | export type Post3Arg5 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, post1: Post1, post2: Post2, post3: Post3) => ReturnType; 58 | export type Post3Arg6 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, post1: Post1, post2: Post2, post3: Post3) => ReturnType; 59 | export type Post3Arg7 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, post1: Post1, post2: Post2, post3: Post3) => ReturnType; 60 | export type Post3Arg8 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, post1: Post1, post2: Post2, post3: Post3) => ReturnType; 61 | export type Post3Arg9 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, post1: Post1, post2: Post2, post3: Post3) => ReturnType; 62 | export type Post3Arg10 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10, post1: Post1, post2: Post2, post3: Post3) => ReturnType; 63 | export type Post4Arg1 any> = (arg1: pick.Arg1, post1: Post1, post2: Post2, post3: Post3, post4: Post4) => ReturnType; 64 | export type Post4Arg2 any> = (arg1: pick.Arg1, arg2: pick.Arg2, post1: Post1, post2: Post2, post3: Post3, post4: Post4) => ReturnType; 65 | export type Post4Arg3 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, post1: Post1, post2: Post2, post3: Post3, post4: Post4) => ReturnType; 66 | export type Post4Arg4 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, post1: Post1, post2: Post2, post3: Post3, post4: Post4) => ReturnType; 67 | export type Post4Arg5 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, post1: Post1, post2: Post2, post3: Post3, post4: Post4) => ReturnType; 68 | export type Post4Arg6 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, post1: Post1, post2: Post2, post3: Post3, post4: Post4) => ReturnType; 69 | export type Post4Arg7 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, post1: Post1, post2: Post2, post3: Post3, post4: Post4) => ReturnType; 70 | export type Post4Arg8 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, post1: Post1, post2: Post2, post3: Post3, post4: Post4) => ReturnType; 71 | export type Post4Arg9 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, post1: Post1, post2: Post2, post3: Post3, post4: Post4) => ReturnType; 72 | export type Post4Arg10 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10, post1: Post1, post2: Post2, post3: Post3, post4: Post4) => ReturnType; 73 | export type Post5Arg1 any> = (arg1: pick.Arg1, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5) => ReturnType; 74 | export type Post5Arg2 any> = (arg1: pick.Arg1, arg2: pick.Arg2, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5) => ReturnType; 75 | export type Post5Arg3 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5) => ReturnType; 76 | export type Post5Arg4 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5) => ReturnType; 77 | export type Post5Arg5 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5) => ReturnType; 78 | export type Post5Arg6 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5) => ReturnType; 79 | export type Post5Arg7 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5) => ReturnType; 80 | export type Post5Arg8 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5) => ReturnType; 81 | export type Post5Arg9 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5) => ReturnType; 82 | export type Post5Arg10 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5) => ReturnType; 83 | export type Post6Arg1 any> = (arg1: pick.Arg1, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6) => ReturnType; 84 | export type Post6Arg2 any> = (arg1: pick.Arg1, arg2: pick.Arg2, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6) => ReturnType; 85 | export type Post6Arg3 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6) => ReturnType; 86 | export type Post6Arg4 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6) => ReturnType; 87 | export type Post6Arg5 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6) => ReturnType; 88 | export type Post6Arg6 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6) => ReturnType; 89 | export type Post6Arg7 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6) => ReturnType; 90 | export type Post6Arg8 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6) => ReturnType; 91 | export type Post6Arg9 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6) => ReturnType; 92 | export type Post6Arg10 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6) => ReturnType; 93 | export type Post7Arg1 any> = (arg1: pick.Arg1, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7) => ReturnType; 94 | export type Post7Arg2 any> = (arg1: pick.Arg1, arg2: pick.Arg2, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7) => ReturnType; 95 | export type Post7Arg3 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7) => ReturnType; 96 | export type Post7Arg4 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7) => ReturnType; 97 | export type Post7Arg5 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7) => ReturnType; 98 | export type Post7Arg6 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7) => ReturnType; 99 | export type Post7Arg7 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7) => ReturnType; 100 | export type Post7Arg8 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7) => ReturnType; 101 | export type Post7Arg9 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7) => ReturnType; 102 | export type Post7Arg10 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7) => ReturnType; 103 | export type Post8Arg1 any> = (arg1: pick.Arg1, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8) => ReturnType; 104 | export type Post8Arg2 any> = (arg1: pick.Arg1, arg2: pick.Arg2, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8) => ReturnType; 105 | export type Post8Arg3 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8) => ReturnType; 106 | export type Post8Arg4 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8) => ReturnType; 107 | export type Post8Arg5 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8) => ReturnType; 108 | export type Post8Arg6 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8) => ReturnType; 109 | export type Post8Arg7 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8) => ReturnType; 110 | export type Post8Arg8 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8) => ReturnType; 111 | export type Post8Arg9 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8) => ReturnType; 112 | export type Post8Arg10 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8) => ReturnType; 113 | export type Post9Arg1 any> = (arg1: pick.Arg1, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9) => ReturnType; 114 | export type Post9Arg2 any> = (arg1: pick.Arg1, arg2: pick.Arg2, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9) => ReturnType; 115 | export type Post9Arg3 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9) => ReturnType; 116 | export type Post9Arg4 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9) => ReturnType; 117 | export type Post9Arg5 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9) => ReturnType; 118 | export type Post9Arg6 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9) => ReturnType; 119 | export type Post9Arg7 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9) => ReturnType; 120 | export type Post9Arg8 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9) => ReturnType; 121 | export type Post9Arg9 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9) => ReturnType; 122 | export type Post9Arg10 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9) => ReturnType; 123 | export type Post10Arg1 any> = (arg1: pick.Arg1, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9, post10: Post10) => ReturnType; 124 | export type Post10Arg2 any> = (arg1: pick.Arg1, arg2: pick.Arg2, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9, post10: Post10) => ReturnType; 125 | export type Post10Arg3 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9, post10: Post10) => ReturnType; 126 | export type Post10Arg4 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9, post10: Post10) => ReturnType; 127 | export type Post10Arg5 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9, post10: Post10) => ReturnType; 128 | export type Post10Arg6 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9, post10: Post10) => ReturnType; 129 | export type Post10Arg7 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9, post10: Post10) => ReturnType; 130 | export type Post10Arg8 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9, post10: Post10) => ReturnType; 131 | export type Post10Arg9 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9, post10: Post10) => ReturnType; 132 | export type Post10Arg10 any> = (arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10, post1: Post1, post2: Post2, post3: Post3, post4: Post4, post5: Post5, post6: Post6, post7: Post7, post8: Post8, post9: Post9, post10: Post10) => ReturnType; -------------------------------------------------------------------------------- /lib/pre-argn.ts: -------------------------------------------------------------------------------- 1 | import * as pre from './pre'; 2 | 3 | // tslint:disable 4 | 5 | /* 6 | 7 | Generator: 8 | 9 | function genX(n) { 10 | return `export type Pre${n}ArgN<${repeat('Pre', n)}, T extends (...args: any[]) => any> = 11 | T extends (${args('pre', undefined, 'Pre', n)}, arg1: infer A) => any ? 12 | T extends (${args('pre', undefined, 'Pre', n)}, arg1: infer A, arg2: infer B) => any ? 13 | T extends (${args('pre', undefined, 'Pre', n)}, arg1: infer A, arg2: infer B, arg3: infer C) => any ? 14 | T extends (${args('pre', undefined, 'Pre', n)}, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D) => any ? 15 | T extends (${args('pre', undefined, 'Pre', n)}, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E) => any ? 16 | T extends (${args('pre', undefined, 'Pre', n)}, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F) => any ? 17 | T extends (${args('pre', undefined, 'Pre', n)}, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G) => any ? 18 | T extends (${args('pre', undefined, 'Pre', n)}, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H) => any ? 19 | T extends (${args('pre', undefined, 'Pre', n)}, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I) => any ? 20 | T extends (${args('pre', undefined, 'Pre', n)}, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I, arg10: infer J) => any ? 21 | pre.Pre${n}Arg10<${repeat('Pre', n)}, T> : 22 | pre.Pre${n}Arg9<${repeat('Pre', n)}, T> : 23 | pre.Pre${n}Arg8<${repeat('Pre', n)}, T> : 24 | pre.Pre${n}Arg7<${repeat('Pre', n)}, T> : 25 | pre.Pre${n}Arg6<${repeat('Pre', n)}, T> : 26 | pre.Pre${n}Arg5<${repeat('Pre', n)}, T> : 27 | pre.Pre${n}Arg4<${repeat('Pre', n)}, T> : 28 | pre.Pre${n}Arg3<${repeat('Pre', n)}, T> : 29 | pre.Pre${n}Arg2<${repeat('Pre', n)}, T> : 30 | pre.Pre${n}Arg1<${repeat('Pre', n)}, T> : 31 | (${args('pre', undefined, 'Pre', n)}) => ReturnType;`; 32 | } 33 | 34 | function genXN(n) { 35 | var a = []; 36 | for (let i = 1; i <= 10; ++i) { 37 | a.push(genX(i)) 38 | } 39 | return a.join('\n\n'); 40 | } 41 | 42 | */ 43 | 44 | export type Pre1ArgN any> = 45 | T extends (pre1: Pre1, arg1: infer A) => any ? 46 | T extends (pre1: Pre1, arg1: infer A, arg2: infer B) => any ? 47 | T extends (pre1: Pre1, arg1: infer A, arg2: infer B, arg3: infer C) => any ? 48 | T extends (pre1: Pre1, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D) => any ? 49 | T extends (pre1: Pre1, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E) => any ? 50 | T extends (pre1: Pre1, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F) => any ? 51 | T extends (pre1: Pre1, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G) => any ? 52 | T extends (pre1: Pre1, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H) => any ? 53 | T extends (pre1: Pre1, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I) => any ? 54 | T extends (pre1: Pre1, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I, arg10: infer J) => any ? 55 | pre.Pre1Arg10 : 56 | pre.Pre1Arg9 : 57 | pre.Pre1Arg8 : 58 | pre.Pre1Arg7 : 59 | pre.Pre1Arg6 : 60 | pre.Pre1Arg5 : 61 | pre.Pre1Arg4 : 62 | pre.Pre1Arg3 : 63 | pre.Pre1Arg2 : 64 | pre.Pre1Arg1 : 65 | (pre1: Pre1) => ReturnType; 66 | 67 | export type Pre2ArgN any> = 68 | T extends (pre1: Pre1, pre2: Pre2, arg1: infer A) => any ? 69 | T extends (pre1: Pre1, pre2: Pre2, arg1: infer A, arg2: infer B) => any ? 70 | T extends (pre1: Pre1, pre2: Pre2, arg1: infer A, arg2: infer B, arg3: infer C) => any ? 71 | T extends (pre1: Pre1, pre2: Pre2, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D) => any ? 72 | T extends (pre1: Pre1, pre2: Pre2, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E) => any ? 73 | T extends (pre1: Pre1, pre2: Pre2, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F) => any ? 74 | T extends (pre1: Pre1, pre2: Pre2, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G) => any ? 75 | T extends (pre1: Pre1, pre2: Pre2, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H) => any ? 76 | T extends (pre1: Pre1, pre2: Pre2, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I) => any ? 77 | T extends (pre1: Pre1, pre2: Pre2, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I, arg10: infer J) => any ? 78 | pre.Pre2Arg10 : 79 | pre.Pre2Arg9 : 80 | pre.Pre2Arg8 : 81 | pre.Pre2Arg7 : 82 | pre.Pre2Arg6 : 83 | pre.Pre2Arg5 : 84 | pre.Pre2Arg4 : 85 | pre.Pre2Arg3 : 86 | pre.Pre2Arg2 : 87 | pre.Pre2Arg1 : 88 | (pre1: Pre1, pre2: Pre2) => ReturnType; 89 | 90 | export type Pre3ArgN any> = 91 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: infer A) => any ? 92 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: infer A, arg2: infer B) => any ? 93 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: infer A, arg2: infer B, arg3: infer C) => any ? 94 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D) => any ? 95 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E) => any ? 96 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F) => any ? 97 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G) => any ? 98 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H) => any ? 99 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I) => any ? 100 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I, arg10: infer J) => any ? 101 | pre.Pre3Arg10 : 102 | pre.Pre3Arg9 : 103 | pre.Pre3Arg8 : 104 | pre.Pre3Arg7 : 105 | pre.Pre3Arg6 : 106 | pre.Pre3Arg5 : 107 | pre.Pre3Arg4 : 108 | pre.Pre3Arg3 : 109 | pre.Pre3Arg2 : 110 | pre.Pre3Arg1 : 111 | (pre1: Pre1, pre2: Pre2, pre3: Pre3) => ReturnType; 112 | 113 | export type Pre4ArgN any> = 114 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: infer A) => any ? 115 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: infer A, arg2: infer B) => any ? 116 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: infer A, arg2: infer B, arg3: infer C) => any ? 117 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D) => any ? 118 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E) => any ? 119 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F) => any ? 120 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G) => any ? 121 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H) => any ? 122 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I) => any ? 123 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I, arg10: infer J) => any ? 124 | pre.Pre4Arg10 : 125 | pre.Pre4Arg9 : 126 | pre.Pre4Arg8 : 127 | pre.Pre4Arg7 : 128 | pre.Pre4Arg6 : 129 | pre.Pre4Arg5 : 130 | pre.Pre4Arg4 : 131 | pre.Pre4Arg3 : 132 | pre.Pre4Arg2 : 133 | pre.Pre4Arg1 : 134 | (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4) => ReturnType; 135 | 136 | export type Pre5ArgN any> = 137 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: infer A) => any ? 138 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: infer A, arg2: infer B) => any ? 139 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: infer A, arg2: infer B, arg3: infer C) => any ? 140 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D) => any ? 141 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E) => any ? 142 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F) => any ? 143 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G) => any ? 144 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H) => any ? 145 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I) => any ? 146 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I, arg10: infer J) => any ? 147 | pre.Pre5Arg10 : 148 | pre.Pre5Arg9 : 149 | pre.Pre5Arg8 : 150 | pre.Pre5Arg7 : 151 | pre.Pre5Arg6 : 152 | pre.Pre5Arg5 : 153 | pre.Pre5Arg4 : 154 | pre.Pre5Arg3 : 155 | pre.Pre5Arg2 : 156 | pre.Pre5Arg1 : 157 | (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5) => ReturnType; 158 | 159 | export type Pre6ArgN any> = 160 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: infer A) => any ? 161 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: infer A, arg2: infer B) => any ? 162 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: infer A, arg2: infer B, arg3: infer C) => any ? 163 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D) => any ? 164 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E) => any ? 165 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F) => any ? 166 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G) => any ? 167 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H) => any ? 168 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I) => any ? 169 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I, arg10: infer J) => any ? 170 | pre.Pre6Arg10 : 171 | pre.Pre6Arg9 : 172 | pre.Pre6Arg8 : 173 | pre.Pre6Arg7 : 174 | pre.Pre6Arg6 : 175 | pre.Pre6Arg5 : 176 | pre.Pre6Arg4 : 177 | pre.Pre6Arg3 : 178 | pre.Pre6Arg2 : 179 | pre.Pre6Arg1 : 180 | (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6) => ReturnType; 181 | 182 | export type Pre7ArgN any> = 183 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: infer A) => any ? 184 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: infer A, arg2: infer B) => any ? 185 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: infer A, arg2: infer B, arg3: infer C) => any ? 186 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D) => any ? 187 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E) => any ? 188 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F) => any ? 189 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G) => any ? 190 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H) => any ? 191 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I) => any ? 192 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I, arg10: infer J) => any ? 193 | pre.Pre7Arg10 : 194 | pre.Pre7Arg9 : 195 | pre.Pre7Arg8 : 196 | pre.Pre7Arg7 : 197 | pre.Pre7Arg6 : 198 | pre.Pre7Arg5 : 199 | pre.Pre7Arg4 : 200 | pre.Pre7Arg3 : 201 | pre.Pre7Arg2 : 202 | pre.Pre7Arg1 : 203 | (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7) => ReturnType; 204 | 205 | export type Pre8ArgN any> = 206 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: infer A) => any ? 207 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: infer A, arg2: infer B) => any ? 208 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: infer A, arg2: infer B, arg3: infer C) => any ? 209 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D) => any ? 210 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E) => any ? 211 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F) => any ? 212 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G) => any ? 213 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H) => any ? 214 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I) => any ? 215 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I, arg10: infer J) => any ? 216 | pre.Pre8Arg10 : 217 | pre.Pre8Arg9 : 218 | pre.Pre8Arg8 : 219 | pre.Pre8Arg7 : 220 | pre.Pre8Arg6 : 221 | pre.Pre8Arg5 : 222 | pre.Pre8Arg4 : 223 | pre.Pre8Arg3 : 224 | pre.Pre8Arg2 : 225 | pre.Pre8Arg1 : 226 | (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8) => ReturnType; 227 | 228 | export type Pre9ArgN any> = 229 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: infer A) => any ? 230 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: infer A, arg2: infer B) => any ? 231 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: infer A, arg2: infer B, arg3: infer C) => any ? 232 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D) => any ? 233 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E) => any ? 234 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F) => any ? 235 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G) => any ? 236 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H) => any ? 237 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I) => any ? 238 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I, arg10: infer J) => any ? 239 | pre.Pre9Arg10 : 240 | pre.Pre9Arg9 : 241 | pre.Pre9Arg8 : 242 | pre.Pre9Arg7 : 243 | pre.Pre9Arg6 : 244 | pre.Pre9Arg5 : 245 | pre.Pre9Arg4 : 246 | pre.Pre9Arg3 : 247 | pre.Pre9Arg2 : 248 | pre.Pre9Arg1 : 249 | (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9) => ReturnType; 250 | 251 | export type Pre10ArgN any> = 252 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: infer A) => any ? 253 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: infer A, arg2: infer B) => any ? 254 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: infer A, arg2: infer B, arg3: infer C) => any ? 255 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D) => any ? 256 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E) => any ? 257 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F) => any ? 258 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G) => any ? 259 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H) => any ? 260 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I) => any ? 261 | T extends (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: infer A, arg2: infer B, arg3: infer C, arg4: infer D, arg5: infer E, arg6: infer F, arg7: infer G, arg8: infer H, arg9: infer I, arg10: infer J) => any ? 262 | pre.Pre10Arg10 : 263 | pre.Pre10Arg9 : 264 | pre.Pre10Arg8 : 265 | pre.Pre10Arg7 : 266 | pre.Pre10Arg6 : 267 | pre.Pre10Arg5 : 268 | pre.Pre10Arg4 : 269 | pre.Pre10Arg3 : 270 | pre.Pre10Arg2 : 271 | pre.Pre10Arg1 : 272 | (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10) => ReturnType; -------------------------------------------------------------------------------- /lib/pre.ts: -------------------------------------------------------------------------------- 1 | import * as pick from './pick'; 2 | 3 | // tslint:disable 4 | 5 | /* 6 | Generator: 7 | 8 | function args(prefix, type, typePrefix, n, post='') { 9 | var a = []; 10 | for (let i = 1; i <= n; ++i) a.push(`${prefix}${i}: ${type || typePrefix + i}${post}`); 11 | return a.join(', '); 12 | } 13 | 14 | function repeat(prefix, n) { 15 | var a = []; 16 | for (let i = 1; i <= n; ++i) a.push(`${prefix}${i}`); 17 | return a.join(', '); 18 | } 19 | 20 | function gen() { 21 | var result = []; 22 | for (let ipre = 1; ipre <= 10; ++ipre) { 23 | for (let iarg = 1; iarg <= 10; ++iarg) { 24 | result.push(`export type Pre${ipre}Arg${iarg}<${repeat('Pre', ipre)}, T extends (...args: any[]) => any> = (${args('pre', undefined, 'Pre', ipre)}, ${args('arg', undefined, 'Arg', iarg, '')}) => ReturnType;`); 25 | } 26 | } 27 | return result.join('\n'); 28 | } 29 | */ 30 | 31 | export type Pre1Arg1 any> = (pre1: Pre1, arg1: pick.Arg1) => ReturnType; 32 | export type Pre1Arg2 any> = (pre1: Pre1, arg1: pick.Arg1, arg2: pick.Arg2) => ReturnType; 33 | export type Pre1Arg3 any> = (pre1: Pre1, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3) => ReturnType; 34 | export type Pre1Arg4 any> = (pre1: Pre1, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4) => ReturnType; 35 | export type Pre1Arg5 any> = (pre1: Pre1, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5) => ReturnType; 36 | export type Pre1Arg6 any> = (pre1: Pre1, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6) => ReturnType; 37 | export type Pre1Arg7 any> = (pre1: Pre1, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7) => ReturnType; 38 | export type Pre1Arg8 any> = (pre1: Pre1, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8) => ReturnType; 39 | export type Pre1Arg9 any> = (pre1: Pre1, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9) => ReturnType; 40 | export type Pre1Arg10 any> = (pre1: Pre1, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10) => ReturnType; 41 | export type Pre2Arg1 any> = (pre1: Pre1, pre2: Pre2, arg1: pick.Arg1) => ReturnType; 42 | export type Pre2Arg2 any> = (pre1: Pre1, pre2: Pre2, arg1: pick.Arg1, arg2: pick.Arg2) => ReturnType; 43 | export type Pre2Arg3 any> = (pre1: Pre1, pre2: Pre2, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3) => ReturnType; 44 | export type Pre2Arg4 any> = (pre1: Pre1, pre2: Pre2, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4) => ReturnType; 45 | export type Pre2Arg5 any> = (pre1: Pre1, pre2: Pre2, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5) => ReturnType; 46 | export type Pre2Arg6 any> = (pre1: Pre1, pre2: Pre2, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6) => ReturnType; 47 | export type Pre2Arg7 any> = (pre1: Pre1, pre2: Pre2, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7) => ReturnType; 48 | export type Pre2Arg8 any> = (pre1: Pre1, pre2: Pre2, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8) => ReturnType; 49 | export type Pre2Arg9 any> = (pre1: Pre1, pre2: Pre2, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9) => ReturnType; 50 | export type Pre2Arg10 any> = (pre1: Pre1, pre2: Pre2, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10) => ReturnType; 51 | export type Pre3Arg1 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: pick.Arg1) => ReturnType; 52 | export type Pre3Arg2 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: pick.Arg1, arg2: pick.Arg2) => ReturnType; 53 | export type Pre3Arg3 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3) => ReturnType; 54 | export type Pre3Arg4 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4) => ReturnType; 55 | export type Pre3Arg5 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5) => ReturnType; 56 | export type Pre3Arg6 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6) => ReturnType; 57 | export type Pre3Arg7 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7) => ReturnType; 58 | export type Pre3Arg8 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8) => ReturnType; 59 | export type Pre3Arg9 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9) => ReturnType; 60 | export type Pre3Arg10 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10) => ReturnType; 61 | export type Pre4Arg1 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: pick.Arg1) => ReturnType; 62 | export type Pre4Arg2 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: pick.Arg1, arg2: pick.Arg2) => ReturnType; 63 | export type Pre4Arg3 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3) => ReturnType; 64 | export type Pre4Arg4 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4) => ReturnType; 65 | export type Pre4Arg5 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5) => ReturnType; 66 | export type Pre4Arg6 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6) => ReturnType; 67 | export type Pre4Arg7 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7) => ReturnType; 68 | export type Pre4Arg8 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8) => ReturnType; 69 | export type Pre4Arg9 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9) => ReturnType; 70 | export type Pre4Arg10 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10) => ReturnType; 71 | export type Pre5Arg1 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: pick.Arg1) => ReturnType; 72 | export type Pre5Arg2 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: pick.Arg1, arg2: pick.Arg2) => ReturnType; 73 | export type Pre5Arg3 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3) => ReturnType; 74 | export type Pre5Arg4 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4) => ReturnType; 75 | export type Pre5Arg5 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5) => ReturnType; 76 | export type Pre5Arg6 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6) => ReturnType; 77 | export type Pre5Arg7 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7) => ReturnType; 78 | export type Pre5Arg8 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8) => ReturnType; 79 | export type Pre5Arg9 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9) => ReturnType; 80 | export type Pre5Arg10 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10) => ReturnType; 81 | export type Pre6Arg1 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: pick.Arg1) => ReturnType; 82 | export type Pre6Arg2 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: pick.Arg1, arg2: pick.Arg2) => ReturnType; 83 | export type Pre6Arg3 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3) => ReturnType; 84 | export type Pre6Arg4 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4) => ReturnType; 85 | export type Pre6Arg5 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5) => ReturnType; 86 | export type Pre6Arg6 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6) => ReturnType; 87 | export type Pre6Arg7 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7) => ReturnType; 88 | export type Pre6Arg8 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8) => ReturnType; 89 | export type Pre6Arg9 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9) => ReturnType; 90 | export type Pre6Arg10 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10) => ReturnType; 91 | export type Pre7Arg1 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: pick.Arg1) => ReturnType; 92 | export type Pre7Arg2 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: pick.Arg1, arg2: pick.Arg2) => ReturnType; 93 | export type Pre7Arg3 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3) => ReturnType; 94 | export type Pre7Arg4 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4) => ReturnType; 95 | export type Pre7Arg5 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5) => ReturnType; 96 | export type Pre7Arg6 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6) => ReturnType; 97 | export type Pre7Arg7 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7) => ReturnType; 98 | export type Pre7Arg8 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8) => ReturnType; 99 | export type Pre7Arg9 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9) => ReturnType; 100 | export type Pre7Arg10 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10) => ReturnType; 101 | export type Pre8Arg1 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: pick.Arg1) => ReturnType; 102 | export type Pre8Arg2 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: pick.Arg1, arg2: pick.Arg2) => ReturnType; 103 | export type Pre8Arg3 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3) => ReturnType; 104 | export type Pre8Arg4 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4) => ReturnType; 105 | export type Pre8Arg5 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5) => ReturnType; 106 | export type Pre8Arg6 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6) => ReturnType; 107 | export type Pre8Arg7 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7) => ReturnType; 108 | export type Pre8Arg8 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8) => ReturnType; 109 | export type Pre8Arg9 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9) => ReturnType; 110 | export type Pre8Arg10 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10) => ReturnType; 111 | export type Pre9Arg1 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: pick.Arg1) => ReturnType; 112 | export type Pre9Arg2 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: pick.Arg1, arg2: pick.Arg2) => ReturnType; 113 | export type Pre9Arg3 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3) => ReturnType; 114 | export type Pre9Arg4 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4) => ReturnType; 115 | export type Pre9Arg5 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5) => ReturnType; 116 | export type Pre9Arg6 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6) => ReturnType; 117 | export type Pre9Arg7 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7) => ReturnType; 118 | export type Pre9Arg8 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8) => ReturnType; 119 | export type Pre9Arg9 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9) => ReturnType; 120 | export type Pre9Arg10 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10) => ReturnType; 121 | export type Pre10Arg1 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: pick.Arg1) => ReturnType; 122 | export type Pre10Arg2 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: pick.Arg1, arg2: pick.Arg2) => ReturnType; 123 | export type Pre10Arg3 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3) => ReturnType; 124 | export type Pre10Arg4 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4) => ReturnType; 125 | export type Pre10Arg5 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5) => ReturnType; 126 | export type Pre10Arg6 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6) => ReturnType; 127 | export type Pre10Arg7 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7) => ReturnType; 128 | export type Pre10Arg8 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8) => ReturnType; 129 | export type Pre10Arg9 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9) => ReturnType; 130 | export type Pre10Arg10 any> = (pre1: Pre1, pre2: Pre2, pre3: Pre3, pre4: Pre4, pre5: Pre5, pre6: Pre6, pre7: Pre7, pre8: Pre8, pre9: Pre9, pre10: Pre10, arg1: pick.Arg1, arg2: pick.Arg2, arg3: pick.Arg3, arg4: pick.Arg4, arg5: pick.Arg5, arg6: pick.Arg6, arg7: pick.Arg7, arg8: pick.Arg8, arg9: pick.Arg9, arg10: pick.Arg10) => ReturnType; 131 | -------------------------------------------------------------------------------- /lib/replace-return.ts: -------------------------------------------------------------------------------- 1 | export type ReplaceReturn = F extends (...args: infer Args) => any ? ((...args: Args) => RT) : never; 2 | -------------------------------------------------------------------------------- /lib/test.ts: -------------------------------------------------------------------------------- 1 | // Test ArgN types statically 2 | 3 | import * as a from './index'; 4 | import { ArgsN, ArgsNum } from './pick-rangen'; 5 | import { ReplaceReturn } from './replace-return'; 6 | import { ArgI } from './pick'; 7 | import { CtorArgs } from './ctor-args'; 8 | 9 | function staticAssert1Args() { 10 | function foo(a: string, b: number) { /** */ } 11 | const assertion: a.Arg2 = 123; 12 | 13 | function boo(a: a.Arg1, b: a.Arg2) { /**/ } 14 | boo('hello', assertion); 15 | } 16 | 17 | function staticAssert2ArgN() { 18 | function f( 19 | a: string, 20 | b: number, 21 | c: boolean, 22 | d: undefined, 23 | e: object, 24 | f: Function, 25 | g: string, 26 | h: number, 27 | i: boolean, 28 | j: null, 29 | ) { /** */ } 30 | 31 | const arg1: a.Arg1 = 'hello'; 32 | const arg2: a.Arg2 = 123; 33 | const arg3: a.Arg3 = true; 34 | const arg4: a.Arg4 = undefined; 35 | const arg5: a.Arg5 = {}; 36 | const arg6: a.Arg6 = () => {}; 37 | const arg7: a.Arg7 = 'hello'; 38 | const arg8: a.Arg8 = 321; 39 | const arg9: a.Arg9 = false; 40 | const arg10: a.Arg10 = null; 41 | } 42 | 43 | function staticAssert3Pre() { 44 | function foo(a: string, b: number) {} 45 | 46 | let boo: (x: boolean, a: string, b: number) => void; 47 | boo = foo as any as a.Pre1Arg2; 48 | 49 | let goo: (x: boolean, y: number, a: string, b: number) => void; 50 | goo = foo as any as a.Pre2Arg2; 51 | } 52 | 53 | function staticAssert4PreN() { 54 | function foo(a: string, b: number) {} 55 | 56 | let boo: (x: boolean, a: string, b: number) => void; 57 | boo = foo as any as a.Pre1ArgN; 58 | 59 | let goo: (x: boolean, y: number, a: string, b: number) => void; 60 | goo = foo as any as a.Pre2ArgN; 61 | } 62 | 63 | function staticAssert5PickRange() { 64 | function foo(a: string, b: number, c: boolean) {} 65 | const args: a.Args2off1 = [ 123, true ]; 66 | } 67 | 68 | function staticAssert6Post() { 69 | function foo(a: string, b: number) {} 70 | 71 | let boo: (a: string, b: number, x: boolean) => void; 72 | boo = foo as any as a.Post1Arg2; 73 | 74 | let goo: (a: string, b: number, x: boolean, y: number) => void; 75 | goo = foo as any as a.Post2Arg2; 76 | } 77 | 78 | function staticAssert7PickRangeN() { 79 | function foo(a: string, b: number, c: boolean) {} 80 | const args: ArgsN = [ 'hello', 123, true ]; 81 | 82 | function boo() {} 83 | const args2: ArgsN = []; 84 | } 85 | 86 | function staticAssert8PostN() { 87 | function foo(a: string, b: number) {} 88 | 89 | let boo: (a: string, b: number, x: boolean) => void; 90 | boo = foo as any as a.Post1ArgN; 91 | 92 | let goo: (a: string, b: number, x: boolean, y: number) => void; 93 | goo = foo as any as a.Post2ArgN; 94 | } 95 | 96 | function staticAssert9ReplaceReturn() { 97 | function foo(a: string, b: number) { 98 | return 'hello world'; 99 | } 100 | 101 | let boo: (a: string, b: number, x: boolean) => number; 102 | boo = foo as any as ReplaceReturn>; 103 | } 104 | 105 | function staticAssert10ReplaceReturn() { 106 | function foo(a: number, b: string): number { return 0; } 107 | function boo(a: number, b: string): string { return '0'; } 108 | 109 | const booFromFoo: ReplaceReturn = boo; 110 | } 111 | 112 | function staticAssertRestArgsN() { 113 | const myCallbacks = { 114 | foo: (a: number, b: number) => a + b, 115 | boo: (a: number) => a + 10, 116 | }; 117 | 118 | function call< 119 | CallbackName extends keyof Callbacks, 120 | Callbacks extends { [k: string]: (...args: any[]) => any } = typeof myCallbacks, 121 | Callback extends (...args: any[]) => any = Callbacks[CallbackName], 122 | >(callbackName: CallbackName, ...args: ArgsN): ReturnType { 123 | return (myCallbacks as { [k: string]: Function })[callbackName as any](...args); 124 | } 125 | 126 | call('foo', 1, 2); 127 | } 128 | 129 | function staticAssertArgsNum() { 130 | function foo(a: number, b: string): number { return 0; } 131 | function boo(a: number, b: string, c: boolean): string { return '0'; } 132 | 133 | const fooI: ArgsNum = 2; 134 | const booI: ArgsNum = 3; 135 | } 136 | 137 | function staticAssertArgI() { 138 | function boo(a: number, b: string, c: boolean): string { return '0'; } 139 | const a: ArgI = 123; 140 | const b: ArgI = '123'; 141 | const c: ArgI = false; 142 | } 143 | 144 | function ctorArgs() { 145 | class A { 146 | constructor( 147 | public x: number, 148 | public y: string, 149 | public z: boolean, 150 | ) {} 151 | } 152 | 153 | const _: CtorArgs = [ 0, '0', false ]; 154 | } -------------------------------------------------------------------------------- /lib/utils.ts: -------------------------------------------------------------------------------- 1 | // coz inline works bad 2 | export type IfExtends = A extends B ? True : False; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tsargs", 3 | "version": "1.4.1", 4 | "description": "typescript function arguments utils", 5 | "types": "lib/index.ts", 6 | "scripts": { 7 | "test": "tsc", 8 | "build": "tsc" 9 | }, 10 | "keywords": [ 11 | "typescript", 12 | "ts", 13 | "args", 14 | "arguments", 15 | "types" 16 | ], 17 | "author": "morglod", 18 | "license": "MIT", 19 | "peerDependencies": { 20 | "typescript": "^3.1.6" 21 | }, 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/Morglod/tsargs" 25 | }, 26 | "devDependencies": { 27 | "typescript": "^3.5.3" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | [![NPM Version](https://badge.fury.io/js/tsargs.svg?style=flat)](https://www.npmjs.com/package/tsargs) [![NPM Downloads](https://img.shields.io/npm/dw/tsargs)](https://www.npmjs.com/package/tsargs) 2 | 3 | # tsargs 4 | 5 | TypeScript utility types for function arguments 6 | Use [Parameters\](https://www.typescriptlang.org/docs/handbook/utility-types.html#parameterstype) instead, if you dont need something special 7 | 8 | * [Pick type of argument](#pick-argument) 9 | * [Pick args of class constructor](#class-constructor) 10 | * [Get arguments number](#get-arguments-number) 11 | * [Replace return type of function](#replace-return-type-of-function) 12 | * [Pick specific range of arguments](#pick-range-of-arguments) 13 | * [Prepend arguments](#prepend-arguments) 14 | * [Append arguments](#append-arguments) 15 | 16 | Checkout [typed event emitter](https://github.com/Morglod/tsee) for real-world example. 17 | 18 | [Tested with static asserts](/lib/test.ts) 19 | 20 | ⚠️ Should use latest typescript version. ⚠️ 21 | 22 | For typescript `2.8.x` switch to `ts280` branch. 23 | 24 |
25 | 26 | How to use ts280 branch 27 | 28 | 29 | ``` 30 | npm install git://github.com/morglod/tsargs.git#ts280 31 | ``` 32 | 33 |
34 | 35 | ## Install & use 36 | 37 | ``` 38 | npm i tsargs 39 | ``` 40 | 41 | ```ts 42 | import { ArgI, Arg2, Args } from 'tsargs'; 43 | 44 | function foo(a: number, b: string) {} 45 | 46 | // Pick all args 47 | const args: Args = [ 123, 'hello' ]; 48 | 49 | // Pick by index 50 | const firstArg: ArgI = 'hello world!'; 51 | 52 | // Pick by definition 53 | const secondArg: Arg2 = 'hello world!'; 54 | ``` 55 | 56 | ## Pick argument 57 | 58 | Use `ArgI` to pick argument by it's index. 59 | 60 | ```ts 61 | import { ArgI } from 'tsargs'; 62 | 63 | function foo(a: number, b: string) {} 64 | 65 | const secondArg: ArgI = 'hello world!'; 66 | ``` 67 | 68 |
69 | 70 | ArgN variant 71 | 72 | 73 | Use Arg`N` type to pick `N` argument (max 10 arg) 74 | 75 | ```ts 76 | import { Arg2 } from 'tsargs'; 77 | 78 | function foo(a: number, b: string) {} 79 | 80 | const secondArg: Arg2 = 'hello world!'; 81 | ``` 82 |
83 | 84 | ## Class constructor 85 | 86 | Use `CtorArgs` to pick all args from constructor. 87 | 88 | ```ts 89 | import { CtorArgs } from 'tsargs'; 90 | 91 | class A { 92 | constructor( 93 | public x: number, 94 | public y: string, 95 | public z: boolean, 96 | ) {} 97 | } 98 | 99 | const args: CtorArgs = [ 123, 'hello', false ]; 100 | ``` 101 | 102 | ## Get arguments number 103 | 104 | ```ts 105 | import { ArgsNum } from 'tsargs'; 106 | 107 | function foo(a: number, b: string): number { return 0; } 108 | function boo(a: number, b: string, c: boolean): string { return '0'; } 109 | 110 | const fooI: ArgsNum = 2; 111 | const booI: ArgsNum = 3; 112 | ``` 113 | 114 | ## Replace return type of function 115 | 116 | ```ts 117 | import { ReplaceReturn } from 'tsargs'; 118 | 119 | function foo(a: number, b: string): number {} 120 | function boo(a: number, b: string): string {} 121 | 122 | const booFromFoo: ReplaceReturn = boo; 123 | ``` 124 | 125 | ## Prepend arguments 126 | 127 | Useful for typed callbacks, rpc or event 128 | 129 | Use Pre`N`Arg`J` type to prepend `N` arguments to function with `J` arguments (max 10 arg) 130 | or Pre`N`ArgN type to prepend `N` arguments to function with unknown arguments number 131 | 132 | ```ts 133 | import { Pre1Arg2, Pre1ArgN } from 'tsargs'; 134 | 135 | function foo(a: number, b: string) {} 136 | function boo(x: string, a: number, b: string) {} 137 | 138 | const booFromFoo: Pre1Arg2 = boo; 139 | const booFromFoo2: Pre1ArgN = boo; 140 | ``` 141 | 142 | Pre`N`ArgN type may cause low ts performance 143 | 144 | ## Append arguments 145 | 146 | Useful for typed callbacks, rpc or event 147 | 148 | Use Post`N`Arg`J` type to append `N` arguments to function with `J` arguments (max 10 arg) 149 | or Post`N`ArgN type to append `N` arguments to function with unknown arguments number 150 | 151 | ```ts 152 | import { Post1Arg2, Post1ArgN } from 'tsargs'; 153 | 154 | function foo(a: number, b: string) {} 155 | function boo(a: number, b: string, x: string) {} 156 | 157 | const booFromFoo: Post1Arg2 = boo; 158 | const booFromFoo2: Post1ArgN = boo; 159 | ``` 160 | 161 | Post`N`ArgN type may cause low ts performance 162 | 163 | ## Pick range of arguments 164 | 165 | Callbacks & arguments list 166 | 167 | Use `Args10` to pick 10 args of function 168 | 169 | Use Args`N`off`Offset` to pick `N` args with `Offset` offset (max 10 arg) 170 | 171 | ```ts 172 | import { Args2off1 } from 'tsargs'; 173 | 174 | function foo(a: boolean, b: number, c: string) {} 175 | const argsBC: Args2off1 = [ 123, 'Hello' ]; 176 | ``` 177 | 178 | Use `Args` to pick all arguments 179 | 180 | ```ts 181 | import { Args } from 'tsargs'; 182 | 183 | function foo(a: boolean, b: number, c: string) {} 184 | const argsABC: Args = [ true, 123, 'Hello' ]; 185 | ``` 186 | 187 | `Args` could be used in rest arguments: 188 | 189 | ```ts 190 | const myCallbacks = { 191 | foo: (a: number, b: number) => a + b, 192 | boo: (a: number) => a + 10, 193 | }; 194 | 195 | function call< 196 | CallbackName extends keyof Callbacks, 197 | Callbacks extends { [k: string]: (...args: any[]) => any } = typeof myCallbacks, 198 | Callback extends (...args: any[]) => any = Callbacks[CallbackName], 199 | >( 200 | callbackName: CallbackName, 201 | ...args: Args // <<<<--------------- 202 | ): ReturnType { 203 | return (myCallbacks as { [k: string]: Function })[callbackName as any](...args); 204 | } 205 | 206 | call('foo', 1, 2); // ok 207 | call('boo', 1, 2); // Error: Should be 2 args, recieved 3 208 | ``` 209 | 210 | Checkout [typed event emitter](https://github.com/Morglod/tsee) for real-world example. 211 | 212 | ## Roadmap 213 | 214 | * ✔️ [Example of typed event emitter](https://github.com/Morglod/tsee) 215 | * ✔️ Pick range of arguments to array type 216 | * ✔️ Pick any number of arguments to array type 217 | * ❌ Pick arguments to object (not needed, use tuples instead) 218 | * ✔️ Replace return type 219 | * Specific argument's type replace 220 | * Remove arguments 221 | 222 | [Write issue on github](https://github.com/Morglod/tsargs/issues) if you have any trouble with arguments in typescript 223 | 224 | ## Contributors 225 | 226 | Thanks [CallumDenby](https://github.com/CallumDenby) for ArgI solution! 227 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ 5 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 6 | "lib": [ "es2017" ], /* Specify library files to be included in the compilation. */ 7 | // "allowJs": true, /* Allow javascript files to be compiled. */ 8 | // "checkJs": true, /* Report errors in .js files. */ 9 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 10 | "declaration": true, /* Generates corresponding '.d.ts' file. */ 11 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 12 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 13 | // "outFile": "./", /* Concatenate and emit output to single file. */ 14 | "outDir": "./temp", /* Redirect output structure to the directory. */ 15 | "rootDir": "./lib", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 16 | // "composite": true, /* Enable project compilation */ 17 | // "removeComments": true, /* Do not emit comments to output. */ 18 | // "noEmit": true, /* Do not emit outputs. */ 19 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 20 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 21 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 22 | 23 | /* Strict Type-Checking Options */ 24 | "strict": true, /* Enable all strict type-checking options. */ 25 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 26 | // "strictNullChecks": true, /* Enable strict null checks. */ 27 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 28 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 29 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 30 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 31 | 32 | /* Additional Checks */ 33 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 34 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 35 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 36 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 37 | 38 | /* Module Resolution Options */ 39 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 40 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 41 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 42 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 43 | // "typeRoots": [], /* List of folders to include type definitions from. */ 44 | // "types": [], /* Type declaration files to be included in compilation. */ 45 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 46 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 47 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 48 | 49 | /* Source Map Options */ 50 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 51 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 52 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 53 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 54 | 55 | /* Experimental Options */ 56 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 57 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 58 | } 59 | } --------------------------------------------------------------------------------