我在TypeScript项目中使用parse-diff
。 parse-diff
不包含类型定义,因此我开始编写自己的类型。
它导出一个函数,如下所示:
exports = function () { /* ... */ }
我将它包含在脚本中:
import * as parse from 'parse-diff';
我通过声明一个模块让定义工作。这是我到目前为止所得到的:
declare module 'parse-diff' {
interface Change {
type: string;
normal: boolean;
ln1: number;
ln2: number;
content: string;
}
interface Chunk {
content: string;
changes: Change[];
oldStart: number;
oldLines: number;
newStart: number;
newLines: number;
}
interface File {
chunks: Chunk[];
deletions: number;
additions: number,
from: string,
to: string,
index: string[]
}
function parse(diff: string): File[];
namespace parse {}
export = parse;
}
这很好用。现在的问题是我无法弄清楚如何在其他地方导入和使用各个接口。
如果我从包中导入它们,我会收到错误:
“parse-diff”没有导出成员“文件”
如果我export
模块中的接口,我必须export default
parse
函数。这样我就得到了错误:
无法调用类型缺少调用签名的表达式。类型'typeof'parse-diff''没有兼容的呼叫签名。
我无法弄清楚如何保持模块的“只有一个导出”特性并使用内部接口。
答案 0 :(得分:2)
编辑命名空间并在其中声明接口
declare module "parse-diff" {
function parse(diff: string): parse.File[];
namespace parse {
interface Change {
type: string;
normal: boolean;
ln1: number;
ln2: number;
content: string;
}
interface Chunk {
content: string;
changes: Change[];
oldStart: number;
oldLines: number;
newStart: number;
newLines: number;
}
interface File {
chunks: Chunk[];
deletions: number;
additions: number;
from: string;
to: string;
index: string[];
}
}
export = parse;
}