使用DefinitelyTyped定义文件

时间:2016-05-16 12:09:45

标签: typescript definitelytyped

我正在使用showdownjs和TypeScript。来自DefinitelyTyped的库有一个定义文件;

问题是我认为这个库是错误的。该文档要求转换器像这样实例化;

var converter = new showdown.Converter();

但是使用TypeScript定义这样做会产生一条错误消息,告知它不存在 - 因为.d.ts中的命名空间是Showdown,但该库存在于全局文字showdown

该定义在底部导出一个名为showdown的模块,但我的IDE似乎并没有这样做。

所以我的问题是:这是TypeScript应该如何工作,或者我最好尝试修复定义并向DefinitelyTyped提交拉取请求?

以下是我如何使用showdown的示例;

import 'angular';
import showdown from 'showdown';

export class MarkdownConfig {
    constructor($showdownProvider: any) {
        showdown.extension('notice', () => {
            return {
                type: 'lang',
                regex: /^(^\S+)\s+(>)\s+(.*)/gmi,
                replace: (text: string, css: string, method: string, message: string) => {
                    let converter = new showdown.converter();
                    return text.replace(/^(^\S+)\s+(>)\s+(.*)/gmi,
                             `<div class="notice notice-${css}">${message}</div>`);
                }
            };
        });
        $showdownProvider.loadExtension('notice');
    }
}

1 个答案:

答案 0 :(得分:1)

正如DefinitelyTyped中的showdown.d.ts所说,目标是版本0.3.1:

// Type definitions for Showdown 0.3.1

我今天遇到了同样的问题,并发布了针对showdown 1.4.1 here的拉取请求。

在PR合并之前,您可以从此位置安装类型定义:

github:tan9/DefinitelyTyped/showdown/showdown.d.ts#aaaafcf9ba0e3d0a769bad1bbd55fbd38fdfbf48

然后在.ts文件中:

import * as showdown from 'showdown';

// register global extension
showdown.extension('notice', () => {...})

// use converter option to specify extension
let converter = new showdown.Converter({extensions: ['notice']});

// or use useExtension
converter.useExtension('notice');