@@ -3,6 +3,21 @@ export type Vector2D = [x: number, y: number];
3
3
export type Vector3D = [ x : number , y : number , z : number ] ;
4
4
export type Vector = Vector2D | Vector3D ;
5
5
export type Color = [ r : number , g : number , b : number , a : number ] ;
6
+ export type NumericValue = number | number [ ] | Vector | Color ;
7
+
8
+ type MathReturn <
9
+ A extends NumericValue ,
10
+ B extends NumericValue
11
+ > = A extends number [ ]
12
+ ? Vector | Color | number [ ]
13
+ : B extends number [ ]
14
+ ? Vector | Color | number [ ]
15
+ : A extends number
16
+ ? B extends number
17
+ ? number
18
+ : Error
19
+ : Error ;
20
+
6
21
export interface PathValue { }
7
22
8
23
export type SourceData = any [ ] ;
@@ -1267,30 +1282,31 @@ export class Layer {
1267
1282
) : string {
1268
1283
return "0000" ;
1269
1284
}
1285
+
1270
1286
/**
1271
1287
* Adds two vectors
1272
1288
*/
1273
- add < VectorType extends Vector | Vector2D | Vector3D > (
1274
- vec1 : VectorType ,
1275
- vec2 : VectorType
1276
- ) : VectorType {
1277
- return vec2 ;
1289
+ add < A extends NumericValue , B extends NumericValue > (
1290
+ a : A ,
1291
+ b : B
1292
+ ) : MathReturn < A , B > {
1293
+ return a as any ;
1278
1294
}
1279
1295
/**
1280
1296
* Subtracts two vectors
1281
1297
*/
1282
- sub < VectorType extends Vector | Vector2D | Vector3D > (
1283
- vec1 : VectorType ,
1284
- vec2 : VectorType
1285
- ) {
1286
- return vec1 ;
1298
+ sub < A extends NumericValue , B extends NumericValue > (
1299
+ a : A ,
1300
+ b : B
1301
+ ) : MathReturn < A , B > {
1302
+ return a as any ;
1287
1303
}
1288
1304
/**
1289
1305
* Multiplies a vector by a given scalar amount
1290
1306
* @param vec1 The vector to multiply
1291
1307
* @param amount The amount to multiply by
1292
1308
*/
1293
- mul < VectorType extends Vector | Vector2D | Vector3D > (
1309
+ mul < VectorType extends number | Vector | Vector2D | Vector3D > (
1294
1310
vec1 : VectorType ,
1295
1311
amount : number
1296
1312
) : VectorType {
@@ -1301,7 +1317,7 @@ export class Layer {
1301
1317
* @param vec1 The vector to divide
1302
1318
* @param amount The amount to divide by
1303
1319
*/
1304
- div < VectorType extends Vector | Vector2D | Vector3D > (
1320
+ div < VectorType extends number | Vector | Vector2D | Vector3D > (
1305
1321
vec1 : VectorType ,
1306
1322
amount : number
1307
1323
) : VectorType {
0 commit comments