在core.ts中定义了一个类AnyId
。
在time.ts中添加了更多方法。我通过声明合并扩展了AnyIf
的类型:
declare module './core' {
interface AnyId {
time(unit?: TimeUnit): AnyId;
since(t: Date): AnyId;
}
}
它在test case中正常工作。可以输入其他方法time
和since
。
但是在将模块发布为npm模块并导入后,声明合并不起作用:
import {anyid} from 'anyid';
anyid().encode('Aa0').time().since(new Date('2018-11-1'));
// ^^^^ error TS2339: Property 'time' does not exist on type 'AnyId'.
答案 0 :(得分:1)
从发布的time.ts
模块导入时,在anyid
中完成的声明合并是不可见的,因为发布的index.d.ts
根本没有引用time
模块。
已发布的index.d.ts
仅包含
import { AnyId } from './core';
declare function anyid(): AnyId;
export default anyid;
export { AnyId, anyid };
从index.ts
导入Time
的源./time
中的行已被编译器删除,因为Time
未被用作任何在index.d.ts
。
最简单的解决方法是在time
,as recommended here中添加对index.ts
的显式引用,或者只是重新导出Time
:
import { AnyId } from './core';
import { Time } from './time';
import { Random } from './random';
import { Fixed } from './fixed';
import { Sequence } from './seq';
import { Func } from './function';
import { Variable } from './variable';
export { Time } from './time';