此表达式不可调用。类型“号码”没有呼叫签名

时间:2020-02-29 08:32:20

标签: node.js typescript model

嗨,我是Typescript的新手,我有一个对象类型变量,其中的值可能与不同类型或嵌套对象的值不同。现在我的问题是,如何为该对象定义一个模型,以便在调用不同的键时不会遇到示例错误?

例如:

export class Controller {
protected static response(res: Response, statusCode: number = 200, data: any, user: string = '', dev: string = '', code: number = 200, result: string = 'success'){
    res.status(statusCode).send({
        data: data,
        message: {
            user: '',
            dev: ''
        },
        code: 403,
        result: 'Error'
    })
}


 ERROR: res.status ---> This expression is not callable. Type 'Number' has no call signatures

3 个答案:

答案 0 :(得分:9)

我也遇到了这个错误,并且意识到我只是忘记了导入Response。添加一条进口线为我解决了这个问题。

import express, {Request, Response} from 'express';

答案 1 :(得分:1)

res.status是根据该错误消息的数字。似乎没有使用正确的参数调用Controller。致电console.log(res)之前先在其中res.status,然后检查您的呼叫站点代码。

答案 2 :(得分:1)

如果它对其他人有帮助,我也遇到过同样的错误:

const shift = progressWidth * percentage
(this.$refs.expected as Vue).$el.style.left = "100px"

其中 percentagenumber。发生错误是因为没有分号,第二行被解释为该行的一部分,如下所示:

const shift = progressWidth * percentage(this.$refs.expected as Vue).$el.style.left = "100px"

这可以通过添加前导分号来解决:

const shift = progressWidth * percentage
;(this.$refs.expected as Vue).$el.style.left = "100px"

或者更好的是,重新排列以便根本不需要它:

const expected = (this.$refs.expected as Vue).$el
const shift = progressWidth * percentage
expected.$el.style.left = "100px"