键入声明文件和调用签名错误

时间:2016-05-30 14:20:27

标签: typescript

由于slug模块缺少官方d.ts文件,因此尝试使用它会出现各种错误。

首先,这是导入模块的文件。

import * as slug from "slug" // Had to create a custom d.ts empty file to avoid compile error as no official definition file existed

let slugify = function (data: string): string {
    let slugified: string = slug('ééé aaa ooo') // error here

    return slugified

}

export default slugify

这是我必须创建的空d.ts文件,以防止编译器输入错误消息:

declare module "slug" {

}

新问题出现在slug('éééaaooo')上:

error TS2349: Cannot invoke an expression whose type lacks a call signature.

我该如何解决这个问题?我应该在d.ts文件中添加“假”内容吗?

1 个答案:

答案 0 :(得分:1)

编译器需要知道slug是如何工作的,你可以通过从定义文件中的模块导出该函数的声明(表示slug在JavaScript中的外观)来让它知道。

这是一种方法:

declare module "slug" {
    interface SlugOptions {
        lower?: boolean;
        // ...add the other options here...
    }

    function slug(val: string, optionsOrReplacement?: SlugOptions | string): string;

    export = slug;
}

我认为导入此库的唯一方法是使用require,因为doesn't use是js代码中的命名/默认导出:

import slug = require("slug");