There are diffrent ways to write the classes and having typescript types. I want to show you here the diffrent approches.
..."useDefineForClassFields": true, // Default true if target is "ES2022" or "ESNext""experimentalDecorators": true,...
This is pretty new if you are a vuex-orm user. If you are a vuex-orm-next user than you are already used to it.
import { Model } from 'pinia-orm'import { Attr, Cast, Uid } form 'pinia-orm/dist/decorators'import { ArrayCast } from 'pinia-orm/dist/casts'class User extends Model { static entity = 'users' @Uid() declare id: string @Cast(() => ArrayCast) @Attr('{}') declare meta: Record<string, any>}
For more information about using declare
read this ticket
import { Model } from 'pinia-orm'import { Attr, Cast, Uid } form 'pinia-orm/dist/decorators'import { ArrayCast } from 'pinia-orm/dist/casts'class User extends Model { static entity = 'users' @Uid() id!: string @Cast(() => ArrayCast) @Attr('{}') meta!: Record<string, any>}
useDefineForClassFields
in tsconfig.json
when using vite >= 2.5.0
. See this issue for more details...."useDefineForClassFields": false,...
import { Model } from 'pinia-orm'import { ArrayCast } from 'pinia-orm/dist/casts'class User extends Model { static entity = 'users' static fields() { return { id: this.uid(), meta: this.attr('{}') } } static casts() { return { meta: ArrayCast, } } id!: number meta!: Record<string, any>}