Leveraging prisma and typescript models simultaneously

In my TypeScript models, I frequently utilize const assertions:

const ListingVehicleTypes = [
  "car",
  "motorcycle",
  "caravan",
  "camper_trailer"
] as const;

interface LISTING {
  vehicleType: typeof ListingVehicleTypes[number];
  ...
}

This results in LISTING["vehicleType"] being accurately inferred as

"car" | "motorcycle" | "caravan" | "camper_trailer"
.

Is it possible to impose such restrictions in my schema.prisma? Imports and TypeScript utilities are prohibited in *.prisma files:

model Listing {
    vehicleType   typeof ListingVehicleTypes[number]  // not allowed
}

If not, how can I integrate the type-safe TypeScript models with Prisma when conducting database queries?

I could always resort to casting query bodies and responses to any, but is there a more elegant solution?

Just to mention, I'm utilizing the mongodb provider -- although I don't believe the provider has any impact in this scenario.

Answer №1

To optimize this, I recommend implementing an enum solution. Verify if enums are supported in the underlying database by referring to this resource.

In your Prisma schema:


model Listing {
  vehicleType  VehicleType @default(car)
}

enum VehicleType {
  car
  motorcycle
  caravan
  camper_trailer
}

After defining this structure, you can utilize it in your TypeScript code like so.

import { Listing } from "@prisma/client";

type VehicleTypes = Listing["vehicleType"];

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

The getMonthlyBalances function is providing inaccurate results when calculating stock balances

One of my functions is called getMonthlyBalances, which takes in two arrays - stocks and trades. It calculates the monthly balance of a user's stock holdings based on their trade history. The stocks array includes objects with stock ID, prices, and da ...

Error: TypeError encountered during UI Runtime JSON conversion of Circular Data Structure

I'm facing an issue while attempting to parse and stringify certain JSON data. The error occurs on this specific line of code: this.copyOfColumns = JSON.parse(JSON.stringify(Object.assign([], this.columns))); Below is the complete @Input (using Ang ...

Array of Typed Objects in TypeScript

Here is the setter I created in TypeScript: public set data(data: Array<Data>) { console.log(data[0].getterProperty); console.log(data[0] instanceof Data); console.log(typeof data[0]); this.setGridDataIfReady(); } If data contains only one ...

What is the best approach to managing a 204 status in Typescript in conjunction with the Fetch API

Struggling to handle a 204 status response in my post request using fetch and typescript. I've attempted to return a promise with a null value, but it's not working as expected. postRequest = async <T>(url: string, body: any): Promise ...

Employ the VSTS node API to retrieve all commits within a specified branch

I have been utilizing the vsts-node-api with reasonable success. However, my goal is to retrieve all commits in a specific branch, as detailed in the REST API documentation located here. Unfortunately, the node api only allows for commit queries in a rep ...

Instantiate a fresh object using the new keyword followed by the Class constructor, and if desired,

I'm looking for a class that I can easily create new instances from and optionally assign properties using the constructor. For instance: class Person { name: string; age: number; constructor(props: {name?: string, age?: number}) { this.nam ...

Nuxt SSR encounters issues when modifying data variables

There is an issue with my Nuxt app where sometimes when the page loads, I encounter an error in the console that causes the page to stop loading other components. The error message reads: Cannot read properties of undefined (reading 'resolved') ...

Is the array index a string or a number?

Why is it that when looping over the indexes of an array they appear as strings, even though using a string to index an array is not allowed? Isn't this inconsistency puzzling? for (const i in ["a", "b", "c"]) { console.log(typeof i + " " + i + " " ...

How can you eliminate the first elements of two or more arrays of objects until all of their first elements match based on a specific field?

My Typescript code includes a Map object called `stat_map` defined as const stat_map: Map<string, IMonthlyStat[]> = new Map(); The interface IMonthlyStat is structured as shown below (Note that there are more fields in reality) export interface IMon ...

Error message: The module cannot be found by the compiler. This issue is resolved when using Visual Code and Definitely

As a newcomer to Typescript, I'm encountering an issue that I believe might have a simple solution. After installing type definitions for a JavaScript library, the compiler is throwing an error that has me stumped. Working on a React Typescript projec ...

Unidentified Controller Scope in Angular and TypeScript

I am struggling with my Angular 1.5 app that uses Typescript. Here is a snippet of my code: mymodule.module.ts: angular.module('mymodule', []).component('mycomponent', new MyComponent()); mycomponent.component.ts export class MyCont ...

does not have any exported directive named 'MD_XXX_DIRECTIVES'

I am currently learning Angular2 and I have decided to incorporate angular material into my project. However, I am encountering the following errors: "has no exported member MD_XXX_DIRECTIVES" errors (e.g: MD_SIDENAV_DIRECTIVES,MD_LIST_DIRECTIVES). Her ...

After defining Partial<T>, encountering an error trying to access an undefined property is unexpected

In my function, I am attempting to standardize certain values by specifying the whole function type as Partial. However, despite declaring the interaction variable as Partial Type, I keep encountering the error message saying "Cannot read property endTime ...

React function failing to utilize the latest state

I'm facing an issue with my handleKeyUp function where it doesn't seem to recognize the updated state value for playingTrackInd. Even though I update the state using setPlayingTrackInd, the function always reads playingTrackInd as -1. It's p ...

Aggregate the values in an array and organize them into an object based on their frequency

I have an array of information structured like this: 0: { first: "sea", second: "deniz", languageId: "English-Turkish"} 1: { first: "play", second: "oynamak", languageId: "English-Turkish&qu ...

Combine several .ts files into one bundle called package.js

Here is the structure of my code: Foo.ts: export module Foo { export function load() { } } Bar.ts: export module Bar { export function load() { } } webpack.config.js: const path = require('path'); module.exports = { entry: { ...

What is the best way to handle success data in React Query?

Currently, I have an API call function (using httpClient as axios instance) interface IRegisterResponse { accessToken: string; } export const register = async ({ name, password, token, }: IRegisterParams) => await httpClient.post<IRegiste ...

React Native (or React) utilizes separate TypeScript modules to detect and respond to style adjustments for dark mode

Objective: Add a dark mode feature to a react native application. A brief overview of the system: File structure: Profile.ts ProfileCss.ts constants.ts In my app, I've organized styles in separate .ts files and exported them as modules to keep them ...

Potential Null Object in Typescript Mongoose: A Concern

Encountering an issue while attempting to locate my user model: Object is possibly 'null'. I would like to find a solution that does not involve suppressing TypeScript's strict rule. const { email, password } = req.body; const user = awai ...

Problem encountered while saving data to firestore

Encountering difficulties when attempting to save and retrieve data from firestore. The code snippet provided below is failing, despite its simplicity and my stable internet connection. Even upgrading to websdk 5.0.4 has not fixed the issue. save = async ...