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

时间:2018-11-08 11:16:42

标签: typescript

core.ts中定义了一个类AnyId

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

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

它在test case中正常工作。可以输入其他方法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'.

1 个答案:

答案 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

最简单的解决方法是在timeas 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';