asynkron - Typescript: Detta uttryck kan inte anropas. Typen '{ getUserInfo(requestData: object): Promise; }' har inga anropssignaturer

Jag har följande problem när jag anropar en annan funktion i TypeScript

Detta uttryck går inte att anropa. Typen '{ getUserInfo(requestData: object): Promise; }' har inga anropssignaturer. i min index.ts

index.ts

  const fetchApiData = await getUserInfo(requestData)

service.ts

import { userInfoApi } from '../constants/api'
import request from '../utils/request'

export default {
  async getUserInfo(requestData: object): Promise<object> {
    return await request(userInfoApi, requestData, 'GET')
  },
}

request.ts

const request = (operation: string, data: object, method: any): Promise<object> => {
  return new Promise(function(resolve, reject) {
    my.request({
      url: operation,
      data: data,
      method: method,
      success: function(res) {
        resolve(res)
      },
      fail: function(err) {
        reject(err)
      },
    })
  })
}

export default (operation: string, data: object, method: any): Promise<any> => {
  let timeHandle
  const timeout = 65 * 1000
  const promiseTimeout = new Promise(resolve => {
    timeHandle = setTimeout(() => {
      resolve({
        success: false,
        errorCode: 'NETWORK_TIMEOUT',
        errorMessage: 'Network Timeout',
      })
    }, timeout)
  })

  return Promise.race([
    request(operation, data, method).then(result => {
      clearTimeout(timeHandle)
      return result
    }),
    promiseTimeout,
  ])
}

Någon idé om hur man fixar det?

Svar #1

Felet är giltigt.

Åtgärda alternativ 1: Åtgärda vid samtal

Baserat på ditt fel Type '{ getUserInfo(requestData: object): Promise; }' har inga anropssignaturer istället för att kalla something(requestData) bör du kalla something.getUserInfo(requestData).

Fixa alternativ 2: Fixa vid definitionen

Ändra :

export default {
  async getUserInfo(requestData: object): Promise<object> {
    return await request(userInfoApi, requestData, 'GET')
  },
}

till

export default async function getUserInfo(requestData: object): Promise<object> {
    return await request(userInfoApi, requestData, 'GET')
};

Svar #2

I mitt fall hände detta på TS 4.5 med det nya Node ES Modules-stödet. I princip importeras moduler skrivna i CommonJs som objekt, och standardexporter stöds inte. För att få åtkomst till vad som troligen är standardexporten, i mitt fall en funktion, använd .default-egenskapen

Istället för

import chariot from 'EastIndiaCo'

Jag var tvungen att använda:

import chariotPkg from 'EastIndiaCo'
const chariot = chariotPkg.default

För att åtgärda detta på upstream-nivå borde underhållaren av EastIndiaCo förmodligen definiera package.json-exports för moduler.

Källa: https://nodejs.org/api/packages.html#packages_exports

Relaterade artiklar


Alla rättigheter förbehållna. © Javascript-Typescript.com • 2025-2026