打字稿定义,ES6类和构造函数

时间:2016-09-12 15:40:13

标签: typescript typescript-typings

我有一个TypeScript项目,其中我想从npm使用libmarkov。它提供了一个名为Generator的ES6可导入类。您可以通过new Generator('some text')使用它。

在我的本地项目中,我创建了一个文件typedefs/libmarkov.d.ts

export class Generator {
    constructor(text: string);
    generate(depth: number);
}

我使用typings进行安装:typings install --save file:./typedefs/libmarkov.d.ts

然而,这:let generator = new Generator('Foo Bar Baz');

...生成此编译器错误:

Error:(5, 21) TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.

我可以更改我的构造函数:constructor(text: string) {};

......但是这给出了:

Error:(2, 31) TS1183: An implementation cannot be declared in ambient contexts.

如果重要,我会以TS 2.0为目标。

1 个答案:

答案 0 :(得分:3)

由于这是一个js库,我怀疑你用

之类的东西加载它
import {Generator} from "libmarkov"

在这种情况下,您的外部模块定义必须类似于

declare module "libmarkov" {

    export class Generator {
        constructor(text: string);
        generate(depth: number);
    }
}

修改 定义错了; libmarkov似乎使用a default export

declare module "libmarkov" {

    export default class Generator {
        constructor(text: string);
        generate(depth: number);
    }
}

导入将是

import Generator from 'libmarkov'