asynkron - Typescript: Detta uttryck kan inte anropas. Typen '{ getUserInfo(requestData: object): Promise
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
