@@ -3,6 +3,21 @@ export type Vector2D = [x: number, y: number];
33export type Vector3D = [ x : number , y : number , z : number ] ;
44export type Vector = Vector2D | Vector3D ;
55export 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+
621export interface PathValue { }
722
823export type SourceData = any [ ] ;
@@ -1267,30 +1282,31 @@ export class Layer {
12671282 ) : string {
12681283 return "0000" ;
12691284 }
1285+
12701286 /**
12711287 * Adds two vectors
12721288 */
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 ;
12781294 }
12791295 /**
12801296 * Subtracts two vectors
12811297 */
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 ;
12871303 }
12881304 /**
12891305 * Multiplies a vector by a given scalar amount
12901306 * @param vec1 The vector to multiply
12911307 * @param amount The amount to multiply by
12921308 */
1293- mul < VectorType extends Vector | Vector2D | Vector3D > (
1309+ mul < VectorType extends number | Vector | Vector2D | Vector3D > (
12941310 vec1 : VectorType ,
12951311 amount : number
12961312 ) : VectorType {
@@ -1301,7 +1317,7 @@ export class Layer {
13011317 * @param vec1 The vector to divide
13021318 * @param amount The amount to divide by
13031319 */
1304- div < VectorType extends Vector | Vector2D | Vector3D > (
1320+ div < VectorType extends number | Vector | Vector2D | Vector3D > (
13051321 vec1 : VectorType ,
13061322 amount : number
13071323 ) : VectorType {
0 commit comments