我正在尝试为具有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 =
和导出自定义类型定义的模块正确创建类型定义?
答案 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 = ...;