I have a store defined in the store/stores.js as follows:
import { get, writable, readable } from "svelte/store";
export const labelStore = writable([])
The labels in my program all of type LabelType defined as follows:
type LabelType = {
imageURL: string;
frameNumber: number;
pointX: number;
pointY: number;
action: "contact" | "detach";
agent: "hand" | "object";
}
In my main section I have a loop that iterates over the labels in the LabelStore and present them to the screen, as follows:
<main>
{#each $labelStore as lbl, index}
<div>Index {index}</div>
<div>Image URL: {lbl.imageURL}</div>
<div>Frame #: {lbl.frameNumber}</div>
<div>Point x: {lbl.pointX}</div>
<div>Point y: {lbl.pointY}</div>
<div>Agent: {lbl.agent}</div>
<div>Action: {lbl.action}</div>
<div>--------------------------------</div>
{/each}
</main>
The problem I'm facing is an error telling me that the attributes I'm trying to acces do not exist:
Property 'imageURL' does not exist on type 'never'.ts(2339)
Property 'frameNumber' does not exist on type 'never'.ts(2339)
...
stores.js file, but it does't work.I'd like to cast the lbl inside the #each loop to <LabelType>. What is the correct way to do it?
Thanks in advance
TypeScript is not able to infer the type of the array passed to writable since it's an empty array. To explicitly give it a type, you can pass the type as a type argument to writable:
type LabelType = {
imageURL: string;
frameNumber: number;
pointX: number;
pointY: number;
action: "contact" | "detach";
agent: "hand" | "object";
}
export const labelStore = writable<LabelType[]>([])