Cha*_*Hon 5 service asynchronous typescript
当我在打字稿中调用另一个函数时,我遇到了以下问题
此表达式不可调用。类型 '{ getUserInfo(requestData: object): Promise; }' 没有调用签名。在我的 index.ts
索引.ts
const fetchApiData = await getUserInfo(requestData)
Run Code Online (Sandbox Code Playgroud)
服务.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')
},
}
Run Code Online (Sandbox Code Playgroud)
请求文件
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,
])
}
Run Code Online (Sandbox Code Playgroud)
知道如何修复它吗?
bas*_*rat 19
该错误是有效的。
根据您的错误,您应该Type '{ getUserInfo(requestData: object): Promise; }' has no call signatures致电而不是致电。something(requestData)something.getUserInfo(requestData)
改变:
export default {
async getUserInfo(requestData: object): Promise<object> {
return await request(userInfoApi, requestData, 'GET')
},
}
Run Code Online (Sandbox Code Playgroud)
到
export default async function getUserInfo(requestData: object): Promise<object> {
return await request(userInfoApi, requestData, 'GET')
};
Run Code Online (Sandbox Code Playgroud)
Ray*_*oss 12
就我而言,这种情况发生在 TS 4.5 上,具有新的 Node ES 模块支持。基本上,用 CommonJs 编写的模块作为对象导入,并且不支持默认导出。要访问可能是默认导出的内容(在我的例子中是一个函数),请使用该.default属性
代替
import chariot from 'EastIndiaCo'
Run Code Online (Sandbox Code Playgroud)
我不得不使用:
import chariotPkg from 'EastIndiaCo'
const chariot = chariotPkg.default
Run Code Online (Sandbox Code Playgroud)
为了解决这个上游问题,EastIndiaCo 的维护者可能应该为模块定义 package.json 导出。
来源: https: //nodejs.org/api/packages.html#packages_exports
| 归档时间: |
|
| 查看次数: |
16047 次 |
| 最近记录: |