声明合并在发布为 npm 模块后不起作用



AnyId在core.ts中定义。

在time.ts中添加了更多的方法。我通过声明合并扩展了AnyIf的类型:

declare module './core' {
interface AnyId {
time(unit?: TimeUnit): AnyId;
since(t: Date): AnyId;
}
}

它在测试用例中运行良好。可以键入附加方法timesince

但在模块作为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的行被编译器删除,因为Timeindex.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';

最新更新