我正在编写使用扩展名作为独立npm
包的包的类型定义。这个包导出一个构造函数作为命名空间,所以现在,.d.ts文件是这样的:
export as namespace module_name;
declare function module_name(): module_name.Methods;
declare namespace module_name {
interface Property {
// some fields here
}
interface ReturnValue {
// some fields here
}
interface Methods {
method(Property): ReturnValue;
}
}
然后,单独导入的扩展可能希望将此处定义的方法与不同的道具一起使用。即,在扩展名中它将是:
export interface Property2 {
// some other fields here
}
在消费者代码中,它将是:
import * as module_name from 'module_name';
import * as extension from 'extension';
const props: extension.Property2 = {
// some fields set here
}
module_name().method(props);
现在它显然会产生编译错误,因为Property2通常与Property不兼容。问题:是否有可能以某种方式编写基本模块和扩展,以便消费者使用此代码并添加最少的内容?