首页 > 解决方案 > 如何使用接口声明一个带有命名参数的函数?

问题描述

使用 babel 时如何使用接口声明一个带有命名参数的函数?

Intellisense 没有显示任何错误,但是,一旦 Babel 编译它,我就会收到一个来自@babel/parser的错误

签名中的名称必须是标识符

declare namespace ServerPlugin {
    interface MyFunction {
        ({ next, extendSchema, extendDatabase }: Params): void;
        displayName?: string;
    }
}

标签: typescriptbabeljs

解决方案


事实证明,babel 不希望我们对命名类型如此准确。

因此,不是描述每个命名参数,而是一个包装它们的未命名参数执行相同的工作。

declare namespace ServerPlugin {
    interface MyFunction {
        (args: Params): void;
        displayName?: string;
    }

    interface Params {
        req: Express.Request;
        res: Express.Response;
        next: NextFunction;
        extendDatabase: ExtendDatabase;
        extendSchema: ExtendSchema;
    }
}

推荐阅读