Undefined property encountered with yargs and typescript

When attempting to utilize yargs for command line parsing in typescript, I encountered an issue:

import yargs from 'yargs';

const argv = yargs
    .option('label', {
    alias: 'l',
    describe: 'Execute bot with these labels',
    demandOption: false,
    type: 'string',
    })
    .option('console', {
    alias: 'c',
    describe: 'Log to console',
    demandOption: false,
    type: 'boolean',
    })
    .help()
    .alias('help', 'h')
    .argv;
    
if(argv.label){
    console.log('label');
}

An error is generated by the compiler:

Property 'label' does not exist on type '{ [x: string]: unknown; label: string | undefined; console: boolean | undefined; _: (string | number)[]; $0: string; } | Promise<{ [x: string]: unknown; label: string | undefined; console: boolean | undefined; _: (string | number)[]; $0: string; }>'.
  Property 'label' does not exist on type 'Promise<{ [x: string]: unknown; label: string | undefined; console: boolean | undefined; _: (string | number)[]; $0: string; }>'

Answer №1

It is possible that argv could potentially return a promise, leading to complexity in determining the returned type.

To simplify this, consider using .parseSync() instead of directly calling argv. By doing so, TypeScript will have a clearer understanding of the data and recognize label as an expected property.

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

Stopping all other audio players when a new one is played in Angular

I am in the process of creating a website using Angular to showcase my music, and I am looking for a script that will pause other audio players when a new one is played. Does anyone have a solution for this? HTML <div> <img src="{{ image }}" a ...

Rearrange a set of elements based on specific criteria

I am completely lost when it comes to deciding on a suitable title for this piece. Here is the information I have retrieved from the API: [ { "order": 1, "role": { "label": "singer" }, ...

Transforming a collection of string arrays into a tree format, as well as reversing the process to convert the tree back into a list of string arrays

I am working with a sorted array containing lists of string arrays: 0:['BS', 'MS','KHB', 'CCBPO'] 1:['BS', 'MS','KHB', 'HBPO'] 2:['BS', 'MS','KHB' ...

implement some level of control within the ngFor directive in Angular

For instance, let's say I have an ngfor loop: <ng-container *ngFor="let setting of settings | trackBy: trackById"> <button mat-button [matMenuTriggerFor]="menu">Menu</button> <mat-me ...

Navigating to a component route in Angular

I need to retrieve the routing URL of a component that is different from the current URL and save it in a service. For example, if my component is called parentComponent and contains another component called childComponent, then the URL of the child compon ...

Difficulty with setting up Typescript in Visual Studio Code on MacOS Catalina

I'm currently facing an issue that appears to be related to the environment. How can I resolve it? And how do I link the installed TSC to my console? Steps to Recreate: npm install -g typescript was able to successfully install or update [email ...

Accessing router params in Angular2 from outside the router-outlet

I am currently working on a dashboard application that includes a treeview component listing various content nodes, along with a dashboard-edit component that displays editable content based on the selected branch of the tree. For example, the tree struct ...

Incorporating the non-typescript npm package "pondjs" into Meteor applications using typescript files

Implementing the Pondjs library into my project seemed straightforward at first: meteor npm install --save pondjs However, I'm encountering difficulties when trying to integrate it with my Typescript files. The documentation suggests: In order ...

The value of 'number' can be assigned to the constraint 'T[keyof T]', however, there is a possibility that 'T[keyof T]' may be initialized with a different subtype of the constraint 'number'

The code below shows how I am attempting to sum each property of an array of T and return it as T: export function sumProperties<T extends { [k: string]: number }>(values: T[]): T { return values.reduce((acc, cur) => { (Object.keys(cur) as A ...

What is the best way to restrict a React input field to have values within the minimum and maximum limits set by its

As a newcomer to React, I am working on restricting my input to values between -10 and 10. Currently, the input is set up to accept any value, and I am utilizing hooks like useState and useEffect to dynamically change and set the input value. My goal is ...

The type 'Text' does not have a property named 'then'

Transitioning from .js to typescript. When I changed the file extension from .js to .ts while keeping the same code, I encountered an error stating Property 'then' does not exist on type 'Text'.ts in the then((value) method. The return ...

Understanding class declaration within a dynamic context in TypeScript

I am currently working on a library and facing difficulties with dynamically inferring types. Within the library, the useModel function returns a Model instance. class Database { ... public useModel(target: Function) { const tableName = getClassMe ...

Attempting to categorize JSON object elements into separate arrays dynamically depending on their values

Here's the JSON data I'm currently working with: ?$where=camis%20=%2230112340%22 I plan to dynamically generate queries using different datasets, so the information will vary. My main objective is to categorize elements within this array into ...

Ways to collect particular tokens for delivering targeted push notifications to designated devices

When filtering the user's contacts, I ensure that only contacts with created accounts are displayed on the screen. This process helps in visually organizing the contact list. List<PhonesContacts> phoneContacts = snapshot.data; Lis ...

Setting input limits in AlertBox in Ionic v3: A step-by-step guide

I am currently working on creating an alert box that includes some inputs. I am trying to restrict the input to a maximum of 10 characters and ensure that only numbers are allowed. Unfortunately, I haven't been able to find any helpful guides on this ...

I keep getting an error message that says "The JSX element type does not have any construct or call signatures."

I am currently developing an application that takes user input through buttons and creates an array. However, when I attempt to display the array, I encounter a JSX element type error. import { Delete } from "lucide-react" export function Passwo ...

Using Typescript in a definition file requires classes and interfaces to be included in the compiled .js file

I am currently working on a Typescript project that consists of two crucial files: app.ts models.d.ts The initial lines of code in app.ts are as follows: ///<reference path="models.d.ts"/> 'use strict'; import * as fs from 'async-f ...

Opting for a .catch over a try/catch block

Instead of using a traditional try/catch to manage errors when initiating requests like the example below: let body; try { const response = await sendRequest( "POST", "/api/AccountApi/RefundGetStatus", JSON.stringify(refundPara ...

How to utilize *ngFor alongside the async pipe for conditional rendering in Angular 8 HTML

.html <ng-container *ngFor="let contact of listContact | async; let index = index;"> <h6 class="title" *ngIf="contact && contact['type']"> {{contact['type']}} </h6> <div> {{conta ...

Tips for reverting from Angular 7 to Angular 6

I attempted to switch from angular 7 back to angular 6 by executing the following npm commands: npm uninstall -g angular-cli npm cache clean npm install -g <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="32535c55475e53401f515e5 ...