使用 DefinitelyTyped 定义文件时出错

Error while using DefinitelyTyped definition file

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

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

var converter = new showdown.Converter();

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

定义在底部导出了一个名为 showdown 的模块,但这似乎没有被我的 IDE 拾取。

所以我的问题是:TypeScript 应该是这样工作的,还是我尝试修复定义并向 DefinitelyTyped 提交拉取请求是个好主意?

这是我如何使用摊牌的示例;

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');
    }
}

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

// Type definitions for Showdown 0.3.1

我 运行 今天遇到了同样的问题,并发出了针对 showdown 1.4.1 的 Pull Request 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');