从发布的
类AnyId
在core.ts中定义。
在time.ts中添加了更多的方法。我通过声明合并扩展了AnyIf
的类型:
declare module './core' {
interface AnyId {
time(unit?: TimeUnit): AnyId;
since(t: Date): AnyId;
}
}
它在测试用例中运行良好。可以键入附加方法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'.
anyid
模块导入时,在time.ts
中完成的声明合并不可见,因为发布的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
中发出的任何声明中都未用作类型。
修复它的最简单方法是在index.ts
中添加对time
的显式引用,如这里所建议的,或者只重新导出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';