使用module.exports导出自定义类型定义

时间:2019-04-29 20:19:13

标签: typescript

我正在尝试为具有module.exports =的现有模块创建类型。我还想创建一个与导出函数返回的对象相对应的自定义类型(接口):

export interface Color {
  rgb: [number, number, number];
}

declare function parseColor(cstr: string): Color;
export default parseColor;

dtslint抱怨“来源没有在任何地方提及默认值。”

我找到了另一种方法,即export = parseColor;而不是export default ...

但是,它抱怨An export assignment cannot be used in a module with other exported elements

是否可以为使用module.exports = 导出自定义类型定义的模块正确创建类型定义?

1 个答案:

答案 0 :(得分:1)

您可以使用Declaration Merging处理此类情况。

使用示例代码,您可以将Color移到与导出函数名称匹配的namespace上:

declare namespace parseColor {
    interface Color {
        rgb: [number, number, number];
    }

}

declare function parseColor(cstr: string): parseColor.Color;

export = parseColor;

然后,您可以显式使用外部模块中的类型:

import * as parseColor from './color';
// OR - import parseColor = require('./color');
const color: parseColor.Color = parseColor('rgb(255,255,255)');

如果您将在不需要解析的模块之间传递Color对象,或者您不喜欢parseColor.Color语法,则可以直接访问类型:

import {Color} from './color';
const color: Color = ...;