What steps can I take to fix the TS2705 error in my TypeScript code?

Issue TS2705: The use of async functions or methods in ES5/ES3 requires the 'Promise' constructor. Please ensure that you have included a declaration for the 'Promise' constructor or added 'ES2015' to your --lib option.

import * as Hapi from 'hapi';

import * as IConfig from 'config';
const config = JSON.parse(JSON.stringify(IConfig));

const serverConnections = config.server,
    server: Hapi.Server = new Hapi.Server(serverConnections);

export module Server {
  export const start = async () => {
    server.route({
      path: '/',
      method: 'GET',
      handler(request, h) {
        return "hello!!!"
      },
    });

    console.log('serverstart')
    server.start();
  }
}

Answer №1

When starting a new TypeScript project from scratch, the tsconfig.json file is usually bare bones with minimal configuration. This means that the compiler may not be aware of all the libraries available on the chosen platform. Essentially, you are working with a basic version of JavaScript and any additional library types you install using npm. By "barebones," it implies that only default libraries are included initially. As of the current date, the official TypeScript documentation mentions:

a default list of libraries are injected. The default libraries injected are:

  • If --target ES5: DOM,ES5,ScriptHost
  • If --target ES6: DOM,ES6,DOM.Iterable,ScriptHost

In your code sample, if you use the async keyword (which simplifies asynchronous programming using the underlying Promise API), TypeScript will attempt to transpile it into Promises. However, without specifying the supported libraries for your platform, this process may encounter issues.

To inform the compiler about the targeted APIs, you have two options:

  1. Add "lib":["es2015"] in your tsconfig.json file
  2. Use the TypeScript CLI command with the --lib flag, e.g., tsc --lib ES2015

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

KeysOfType: Identifying the precise data type of each property

I came across a solution called KeysOfType on a post at : type KeysOfType<T, TProp> = { [P in keyof T]: T[P] extends TProp? P : never }[keyof T]; Here are the interfaces being used: interface SomeInterface { a: number; b: string; } interface A ...

Encountering an issue when trying to generate a button in Angular

I am currently using JavaScript to dynamically create a button in Angular. While I have been successful in creating the button, I am encountering an error when attempting to change the classname. The error message I am receiving is: Property 'clas ...

Executing the routing component prior to any other tasks

Having an issue where the ProductsService is fetching data from the server and storing it in an Array. The ProductsComponent serves as the parent component, while the ProductsListComponent and ProductListItemsComponent are its children components. The flow ...

retrieving necessary components from sdk_aws

When I updated my project, I encountered the following error while trying to execute the ng serve command: ERROR in node_modules/aws-sdk/clients/s3.d.ts(12,24): error TS2307: Cannot find module 'stream'. node_modules/aws-sdk/clients/s3.d.ts(908,2 ...

Tips for configuring VS Code to display and check object schemas

npm init -y npm i axios npm i @types/axios --save-dev Why doesn't VS Code 1.62 seem to provide the response object schema when typing code like this: resp = await axios("https://httpstat.us/404"); resp. <C-Space> displays confusing / inappropr ...

Tips for Maintaining User Sessions in Ionic 4 Application

I am facing an issue with keeping users logged in to the app in Ionic 4. I have tried storing credentials like email and cross-checking the user using an API, then redirecting to the menu page. However, I am experiencing a brief moment on the login page be ...

What scenarios call for utilizing "dangerouslySetInnerHTML" in my React code?

I am struggling to grasp the concept of when and why to use the term "dangerous," especially since many programmers incorporate it into their codes. I require clarification on the appropriate usage and still have difficulty understanding, as my exposure ha ...

Breaking down the steps to flip between two images when clicked in Vue.js

I'm currently trying to implement a feature in Vue.js where images switch on click. The functionality I'm aiming for is as follows: Upon initial load, the image displays in black, then upon clicking/selecting it, the image transitions into a blu ...

Is there a way to adjust this validation logic so that it permits the entry of both regular characters and certain special characters?

Currently, the input field only accepts characters. If any other type of character is entered, an error will be thrown as shown in the code below. How can I update this logic to allow not only letters but also special characters like hyphens and apostrop ...

The functionality of CDK Drag Drop is not accurately adjusting the placement of images

I have implemented an image gallery and am working on rearranging the position of the images using the Drag & Drop cdk library. However, I am facing an issue where the swapping of images does not always occur correctly; sometimes when attempting to exchan ...

How can I wrap text in Angular for better readability?

I've created a calendar in my code that displays events for each day. However, some event descriptions are too long and get cut off on the display. Even after attempting to use Word Wrap, I still can't see the full text of these events unless I c ...

Using React with Typescript: How to pass a function as a prop to a child component and call it from within

I am trying to pass a function as a prop to a child component so that the child can call it. Here is my parent component: interface DateValue { dateValue: string; } const Page: React.FC = () => { const dateChanged = (value: DateValue) => { ...

Typescript Error:TS2345: The argument '{ theme: string; jsonFile: string; output: string; }; }' is not compatible with the parameter type 'Options'

Encountering an error mentioned in the title while using the code snippet below: import * as fs from 'fs' import { mkdirp } from 'mkdirp' import * as report from 'cucumber-html-reporter' const Cucumber = require('cucumber ...

How to open a PDF file in a new tab using Angular

Within my Angular 12 application, I am seeking to enable users to "view" a PDF file stored locally in the application within a new tab on Google Chrome. Currently, when implementing the code below in HTML, the file downloads rather than opening in a new ta ...

What is the best way to implement a condition within an ngFor loop in Angular?

I am looking to iterate the user list with a condition. <li *ngFor="let user of users" *ngIf="user.age>25"> {{user.name}} </li> I understand that this code is incorrect. However, I would like to achieve something similar. Is there any way ...

Experimenting with a TypeScript function containing a subscription operation

Currently, I am experimenting with Jasmine/Karma while working on an Angular 4 project. The issue I'm facing involves testing a function that seems to have trouble setting the 'name' property: https://i.stack.imgur.com/3q49i.jpg The assign ...

How can the service receive the return value from a subscribed subject?

I have a question about whether it is possible to retrieve the value from a call to Subject.next(). Can you suggest any other approaches on how to receive a response in the given scenario? My current situation involves a notify service that is used throug ...

Can one generate an enum based on a specific type?

I have a preference: preference Preference = 'OptionA' | 'OptionB' Is it feasible to generate an enumeration from this preference? For instance: enumeration Enum = { OptionA, OptionB } I am uncertain about the feasibility of this. ...

Difficulty encountered while trying to link an abstract class with Redux state using redux-thunk

My approach to using redux-thunk and class components in React follows a basic pattern. The code below shows how a class definition MyClass is exported, correctly connected to state through mapStateToProps, and has access to actions from mapDispatchToProps ...

Exploring potential arrays within a JSON file using TypeScript

Seeking guidance on a unique approach to handling array looping in TypeScript. Rather than the usual methods, my query pertains to a specific scenario which I will elaborate on. The structure of my JSON data is as follows: { "forename": "Maria", ...