I am having following issue, when i call to another function in typescript
This expression is not callable. Type '{ getUserInfo(requestData: object): Promise; }' has no call signatures. in my 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,
])
}
Any idea how to fix it?
The error is valid.
Based on your error Type '{ getUserInfo(requestData: object): Promise; }' has no call signatures
instead of calling something(requestData)
you should be calling something.getUserInfo(requestData)
.
Change:
export default {
async getUserInfo(requestData: object): Promise<object> {
return await request(userInfoApi, requestData, 'GET')
},
}
to
export default async function getUserInfo(requestData: object): Promise<object> {
return await request(userInfoApi, requestData, 'GET')
};
In my case this was happening on TS 4.5 with the new Node ES Modules support. Basically, modules written in CommonJs import as objects, and default exports are not supported. To access what's proably the default export, in my case a function, use the .default
property
Instead of
import chariot from 'EastIndiaCo'
I had to use:
import chariotPkg from 'EastIndiaCo'
const chariot = chariotPkg.default
To fix this upstream, the maintainer of EastIndiaCo should probably define package.json exports for modules.
Source: https://nodejs.org/api/packages.html#packages_exports
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With