Is there a way to verify if String Literal Types have a specific value in TypeScript?

Can we determine if the variable str is present in the set of values defined by Name?

Is it doable?

/* hypothetical code */

type Name = 'a1' | 'a2' | .... | 'z100';

function isName(str: string): str is Name {
  switch (str) {
    case 'a1':
    case 'a2':
      // ...
    case 'z100':
      return true;
    default:
      return false;
  }
}

isName('alice') // -> true or false

Answer №1

Switching from a type to a runtime check is not possible. Types are removed during compile time, making it impossible to access any information from them at runtime. However, the opposite direction is feasible; you can convert a value into a type:

const Name = ['a1', 'a2', 'z100'] as const // array with all values
type Name = typeof Name[number]; // retrieve the same type as previously

function isName(str: string): str is Name {
  return Name.indexOf(str as any) !== -1; // basic verification
}

isName('alice') // -> true or false

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

Typescript raises a error notification regarding the absence of a semicolon when importing a JSON module

Attempting to import a local JSON object into my Vuex store using const tree = import('@/articles/tree.json');. The setting "resolveJsonModule": true, has been enabled in my tsconfig.json and it loads successfully, however NPM is flooding the out ...

"Refining MongoDB queries with a filter after performing a populate

I want to retrieve all records with populated attributes in a query. Here is the TypeScript code: router.get("/slice", async (req, res) => { if (req.query.first && req.query.rowcount) { const first: number = parseInt(req.qu ...

Beginning selenium web-driver with TypeScript - a simple guide

Currently, I am embarking on a UI Automation project utilizing Selenium and typeScript. I would greatly appreciate any insights on how to proceed with this endeavor. My previous experience involves working with Selenium WebDriver in Java. I have successf ...

Encountering an issue with Typescript React application when utilizing the latest `satisfies` operator in TS 4.9.3

I attempted to incorporate the new satisfies operator in my Typescript React application, but unfortunately, it is not functioning as expected. Here is a glance at the details of the package.json and relevant typescript packages. { "dependencies& ...

When accessing the route "/[locale]", make sure to await the `params` object before utilizing its properties like `params.locale`

Currently, I am developing a Next.js 15 application utilizing the new App Router (app directory) with dynamic route localization. Within my project, I have implemented a [locale] directory to manage multiple language routes and utilize the params object to ...

Typescript eliminates the need for unnecessary source code compilation

Within directory TS 2.6.2, there are three files: interface.ts: export interface Env { x: string } index.ts: import {Env} from './interface' // importing only the interface const env: Env = {x: '1'} console.log(env.x) tsconfi ...

React with Typescript prop is functioning well, despite displaying an error

After creating a component and passing props to styled components, everything seems to be working fine. However, I keep encountering this error on the first prop. Component type WelcomeProps = { image: String, color: String } const StyledWelcom ...

What is the best way to choose a random text from a dropdown menu that contains several div elements using Playwright?

web element Is it possible to choose a "random" text using div tags from a dropdown? I am attempting to pick any random country from the dropdown with the following code in Playwright: const selectCountry = this.page.locator('<this locator>&apos ...

Sending asynchronous data to a child component using ngOnChanges is not effective

After following a tutorial on passing async data to Angular 2 child components, specifically using solution number 2, I attempted to implement the method as shown below: Code snippet from parent component ts : ngOnInit() { this.route.queryParams.subs ...

Utilize SCSS values within TypeScript by applying them on a class level

let changeClassDisplay = document.getElementsByClassName('sidebar'); for (var i = 0; i < changeClassDisplay.length; i += 1) { changeClassDisplay[i].style.display = 'block'; } I encountered an issue with this code whe ...

Creating dynamic checkboxes in Angular4 and binding them to an array of IDs

Hey there developers, I've been encountering an issue while trying to bind my dynamically generated checkboxes to an array in my project. In my users.template.html file, I have the following code snippet: <div *ngFor="let r of roles" class="checkb ...

Encountering issues with connecting to Upstash using next.js 13: receiving error message "Unable to access properties of undefined (reading 'startsWith')."

I'm attempting to establish a connection with upstash's redis using the code snippet below. However, I am encountering an error. Can you identify what the issue might be? 【code】 import { Redis } from "@upstash/redis"; const redis ...

What is the best way to divide text into key-value pairs using JavaScript?

I have data in text format from my Raspberry Pi that I need to insert into MongoDB as key-pair values or JSON for my Node.js Application. I'm relatively new to JavaScript and I'm looking for a solution. Any suggestions would be greatly appreciate ...

Can we limit a generic type to only accept a subset of keyof values in TypeScript?

In the latest version (2.1) of TypeScript, I have the ability to restrict a method argument in a generic class to be a property of the generic type. class Foo<TEntity extends {[key:string]:any}> { public bar<K extends keyof TEntity>(key:K, ...

What could be causing the undefined value in my Many-to-Many relationship field?

Currently, I am in the process of setting up a follower/following system. However, as I attempt to add a new user to the following list, I encounter an error stating Cannot read property 'push' of undefined. This issue results in the creation of ...

Differences between useFormState and useForm in Next.js version 14

Currently, I am intrigued by the comparison between using the react hook useForm and the react-dom useFormState. The Nextjs documentation suggests utilizing useFormState, but in practice, many developers opt for the react hook useForm. I am grappling with ...

I need assistance in deactivating all functions activated by @typescript-eslint/ban-types

I am constantly battling with the "@typescript-eslint/ban-types" rule. It plagues me with countless errors in the hundreds on my large project, making it a nightmare to manage and resolve. Despite having the following configuration in place, eslint seems ...

Angular DatePipe is struggling to identify the date format

I am facing an issue in my Angular application where I need to display the date in the 'MM/dd/yyyy' format. The Web API is sending the date in the format of "2020-12-01T00:00:00". Even though I am using the DatePipe, it does not recogn ...

Problem with custom anchor component in React that needs to perform an action before being clicked

React Component (Custom Anchor) import React from 'react'; class Anchor extends React.Component { onClick = (event) => { // ----------------------------- // send Google Analytics request ...

In the latest version of Angular, accessing document.getelementbyid consistently returns null

I am struggling with a component that looks like this export class NotificationPostComponent extends PostComponent implements OnInit, AfterViewInit { commentsDto: IComment[] = []; commentId = ''; ngOnInit(): void { this.route.data ...