///
import { immerable } from 'immer';
import * as t from 'io-ts';
import { Angle } from './angle';
export declare const VectorLike: t.TypeC<{
x: t.NumberC;
y: t.NumberC;
}>;
export declare type VectorLike = t.TypeOf;
export declare const VectorType: t.Type;
export declare class Vector implements VectorLike {
[immerable]: boolean;
readonly x: number;
readonly y: number;
constructor(x: number, y: number);
static fromVectorLike(v: VectorLike): Vector;
protected factory(x: number, y: number): Vector;
private apply;
add(other: VectorLike): Vector;
subtract(other: VectorLike): Vector;
times(other: VectorLike): Vector;
div(other: VectorLike): Vector;
dot(other: VectorLike): number;
rotate(radians: number | Angle): Vector;
scale(scale: number): Vector;
normalize(targetLength?: number): Vector;
get lengthSquared(): number;
get length(): number;
get unitVector(): Vector;
lengthenBy(c: number): Vector;
shortenToLength(c: number): Vector;
get angle(): Angle;
}