如何创建一个打字文件以将模块导出为类

时间:2018-04-04 23:10:24

标签: typescript typescript-typings

我有一些导入messageformat模块的Javascript代码。这个模块可以这样使用:

const MessageFormat = require('messageformat');
const mf = new MessageFormat("en-US");
const text = mf.compile(...);

此模块导出一个类,但它没有一个打字文件。我创建了以下打字文件:

declare module "messageformat" {
  export class MessageFormat {
    constructor(locale: string);
    public compile(messageString: string): string;
  }
}

在我的Typescript代码中,我现在将其用作:

import { MessageFormat } from "messageformat";
const mf = new MessageFormat("en-US");
const text = mf.compile(...);

不幸的是,这不会生成new MessageFormat("en-US"),但会生成失败的new messageformat_1.MessageFormat("en-US")。我也尝试了以下方法:

declare module "messageformat" {
  export default class MessageFormat {
    constructor(locale: string);
    public compile(messageString: string): string;
  }
}

在我的Typescript代码中,我现在将其用作:

import MessageFormat from "messageformat";
const mf = new MessageFormat("en-US");
const text = mf.compile(...);

但这会编译为new messageformat_1.default('en-US'),这也是不正确的。如何创建打字文件(以及如何导入模块)以便构造正确的类?

1 个答案:

答案 0 :(得分:0)

此答案基于this answer

看起来以下方法有效:

declare module "messageformat" {
  class MessageFormat {
    constructor(locale: string);
    public compile(messageString: string): string;
  }

  export = MessageFormat;
}

不幸的是,我不能再使用import语句,但以下代码似乎有效:

import MessageFormat = require("messageformat");
const mf = new MessageFormat("en-US");
const text = mf.compile(...);

虽然我认为import MessageFormat = require("messageformat")看起来有点尴尬,但它确实有效并且可以使用所有类型。