iinkTS
iinkTS copied to clipboard
[suggestion] friendly type declaration
We are on [email protected]
, and the type of element is not so friendly. Typescript cannot recognize the element type in switch case
Here is a rough example to make this library easier to use (I didn't look forward to the entire types, might miss something)
interface TJIIXBase {
'bounding-box'?: TBoundingBox;
items?: TJIIXStrokeItem[];
}
interface TJIIXElementBase<T = string> extends TJIIXBase {
id: string;
type: T;
}
interface TJIIXNodeElementBase<T extends ShapeKind>
extends TJIIXElementBase<'Node'> {
kind: T;
}
interface TJIIXNodeCircle extends TJIIXNodeElementBase<ShapeKind.Circle> {
cx: number;
cy: number;
r: number;
}
interface TJIIXNodeEllipse extends TJIIXNodeElementBase<ShapeKind.Ellipse> {
cx: number;
cy: number;
rx: number;
ry: number;
}
interface TJIIXNodeRectangle extends TJIIXNodeElementBase<ShapeKind.Rectangle> {
height: number;
width: number;
x: number;
y: number;
}
interface TJIIXNodeTriangle extends TJIIXNodeElementBase<ShapeKind.Triangle> {
id: string;
type: 'Node';
kind: ShapeKind.Triangle;
points: number[];
}
interface TJIIXNodeParrallelogram
extends TJIIXNodeElementBase<ShapeKind.Parallelogram> {
points: number[];
}
interface TJIIXNodePolygon extends TJIIXNodeElementBase<ShapeKind.Polygon> {
points: number[];
}
interface TJIIXNodeRhombus extends TJIIXNodeElementBase<ShapeKind.Rhombus> {
points: number[];
}
type TJIIXNodeElement =
| TJIIXNodeCircle
| TJIIXNodeEllipse
| TJIIXNodeRectangle
| TJIIXNodeTriangle
| TJIIXNodeParrallelogram
| TJIIXNodePolygon
| TJIIXNodeRhombus;
interface TJIIXTextElement extends TJIIXElementBase<'Text'> {
'bounding-box'?: TBoundingBox;
label: string;
words?: TJIIXWord[];
chars?: TJIIXChar[];
}
interface TJIIXEdgeElementBase<T = EdgeKind> extends TJIIXElementBase<'Edge'> {
kind: T;
}
interface TJIIXEdgeLine extends TJIIXEdgeElementBase<EdgeKind.Line> {
kind: EdgeKind.Line;
x1: number;
x2: number;
y1: number;
y2: number;
p1Decoration?: EdgeDecoration;
p2Decoration?: EdgeDecoration;
}
interface TJIIXEdgeArc extends TJIIXEdgeElementBase<EdgeKind.Arc> {
cx: number;
cy: number;
rx: number;
ry: number;
phi: number;
startAngle: number;
sweepAngle: number;
startDecoration?: EdgeDecoration;
endDecoration?: EdgeDecoration;
}
type TJIIXEdgeElement = TJIIXEdgeLine | TJIIXEdgeArc;
type TJIIXElement = TJIIXNodeElement | TJIIXTextElement | TJIIXEdgeElement;
Using the types above, we can get the correct type in switch case or if statement using typescript