io-ts: utilizing TypeOf with DateFromISOString

struggling to validate and interpret api response:

const Bar  = t.type({
    identifier: t.number,
    timestamp: DateFromISOString,
  });

  type BarType = t.TypeOf<typeof Bar>;
  const jsonBar: BarType = {"identifier": 1, "timestamp": "2022-01-15T09:45:10.123Z"};
  const resultBar = Bar.decode(jsonBar);

the issue arises from the fact that the type defines timestamp property as a date while it's actually a string in the jsonBar

Am I overlooking something here or do I need separate types for the incoming data and decoded object?

Answer №1

If you want to combine DateFromISOString and string types, you can use the 'union' function.

const Person = t.type({
      id: t.number,
      dob: t.union([DateFromISOString, t.string]),
    });

Alternatively, you can create a Date instance from a string and then convert it back to a string using the 'toISOString' helper function.

const Person = type({
      id: number,
      dob: DateFromISOString,
    });

type PersonType = TypeOf<typeof Person>;
const personData: PersonType = { id: 1, dob: new Date("2021-02-05T11:13:22.520Z") };
const resultPerson = Person.decode(personData);

const convertedDate = personData.dob.toISOString();

assert.deepStrictEqual(convertedDate, right(personData.dob)); // This assertion fails
assert.deepStrictEqual(DateFromISOString.decode(convertedDate), right(personData.dob)); // This assertion succeeds

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

Retrieve the Document ID from Firebase

I'm currently exploring the functionality of Firebase and enhancing my workflow with "react-firebase-hooks". Is there a way for me to retrieve both the doc id and doc data simultaneously and pass them as props? Currently, I am only able to access the ...

Having trouble importing SVG as a React component in Next.js

I initially developed a project using create-react-app with Typescript, but later I was tasked with integrating next.js into it. Unfortunately, this caused some SVGs throughout the application to break. To resolve this issue, I implemented the following pa ...

Tips for identifying the cause of a memory leak in browser notifications

I am looking to implement browser notifications in a browser extension. However, I have noticed that the memory usage does not decrease after closing the notification. Can someone explain why this may be happening? Allow StackOverflow show notifications i ...

Issue with Angular Reactive form: Checkbox checked property not binding correctly when the page initially loads

Looking to achieve Two-way data binding of Checkbox in Angular Reactive forms. After checking the checkbox, I am updating the 'isdateChkd' variable and storing it in the state. Despite the variable being set to TRUE, the checkbox does not get aut ...

Issue: The function react.useState is either not defined or its output is not iterable

I'm facing an issue while programming in Next.js 13. Any help or suggestions would be greatly appreciated! Here are the relevant files: typingtext.tsx import React from "react"; export function useTypedText(text: string, speed: number, dela ...

Customizable mongoDB database collection

Is there a more efficient way to make calls to different collections based on a function parameter? I'm exploring the possibility and if it's not feasible, I'll handle it case by case. Currently, I have this code and the goal is to have a u ...

The module "@react-native-firebase/firestore" does not have the specified exported member named 'CollectionReference'. (Error code: ts2614)

Utilizing TypeScript and React Native with Firestore (without expo). When attempting to import: import { CollectionReference } from '@react-native-firebase/firestore' An error is received: The module "@react-native-firebase/firestore" does no ...

Set the style of the mat-select element

I'm having an issue with my select option in Angular Material. The options look fine, but when I select one, the strong tag disappears. Can anyone help me style only that part? Thank you in advance. <mat-select formControlName="projectId" ...

The issue with dispatching actions in TypeScript when using Redux-thunk

As a beginner in TypeScript, I apologize if my question seems silly, but I'll ask anyway: I'm attempting to make an async call getUsersList(), but the issue is that it's not triggering the dispatch (it's not logging "hello"). It worked ...

What could be the reason for the absence of Mock Service Worker in a React project that has Typescript enabled?

After attempting to integrate Mock Service Worker into my React project with Typescript support, I encountered errors when running the npm install msw --save-dev command. The terminal displayed the following messages: PS F:\Programming\React Prac ...

The mysterious appearance of the <v-*> custom element in Vuetify Jest

Currently, I am in the process of writing unit tests for my project using Jest. The project itself is built on Vue, Vuetify (1.5), TypeScript, and vue-property-decorator. One particular area of focus for me has been creating a basic wrapper for the <v- ...

Ways to modify the data type of a private property within a class by using a method

In my Class, I have the capability to accept inputs in the form of SVGElements or HTMLElements or an array containing these elements. I want to establish strong typing for this so that the methods in the class can accurately determine the type based on use ...

I encountered a function overload error while creating a component for the API service

As a developer venturing into API design with a backend server that handles client-side calls, I find myself grappling with Typescript, transitioning from a Java background. Encountering the error message "No overload matches this call" has left me seeking ...

Transitioning a codebase from @angular-builders/custom-webpack to NX for project optimization

I need help migrating my Angular project from using "@angular-builders/custom-webpack" build targets to transitioning to an integrated NX monorepo. When I run the command npx nx@latest init --integrated, I receive the following warning: Unsupported build ...

Removing unnecessary files from a frontend npm package in a production environment: Best practices

Having trouble organizing the build process for my frontend web app created with Angular 2 and TypeScript. This is the structure I'm working with: / - dist/ <-- transpiled .js files - src/ <-- .ts files - assets/ - bower_components/ ...

Tips for determining if an array of objects, into which I am adding objects, contains a particular key value present in a different array of objects

I've been working on this and here is what I have tried so far: groceryList = []; ngOnInit() { this._recipesSub = this.recipesService.recipes.subscribe((receivedData) => { this.loadedRecipes = receivedData.recipes; }); } onCheckRecipe(e) { ...

The main module's postinstall process is initiated before the sub-module's postinstall process

Update: I am seeking guidance on how to install a module from GitHub instead of npm. That's the main query. In case you're wondering why: I'm currently working on some confidential projects and prefer not to publish the code. As a result, ...

How can we determine the props' type specific to each component?

type ComponentCProps = { c: string; }; function ComponentC(props: ComponentCProps) { return <div>component C</div>; } type ComponentDProps = { d: string; }; function ComponentD(props: ComponentDProps) { return <div>component D& ...

Ways to verify the existence and non-empty status of a directory?

zip.loadAsync(files).then(function(directory:any){ if (directory.folder("Mary")){ console.log("fail"); } else{ directory.folder("Mary").forEach(function (filename: any) {Console.log(filename);}); }; } I am attem ...

Menu with options labeled using IDs in FluentUI/react-northstar

I'm currently working on creating a dropdown menu using the FluentUI/react-northstar Dropdown component. The issue I'm facing is that the 'items' prop for this component only accepts a 'string[]' for the names to be displayed ...