我正在使用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');
}
}
答案 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');