如何声明导入另一个Type的TypeScript模块

时间:2019-10-08 04:54:00

标签: typescript

在Typescript 3.6.3中,我想为没有@types包可用的模块创建一个声明。

其中一个功能参数在另一个定义了类型的模块中定义。

geobuf.d.ts

import Pbf = require('pbf');

declare module 'geobuf' {
  export function encode(obj: any, pbf: Pbf): Uint8Array;
}

但是,当我这样做时,似乎TypeScript想在模块增强模式下运行(这是可以理解的,因为我在声明文件中有导入)。我收到错误消息:

TS2665: Invalid module name in augmentation. Module 'geobuf' resolves to an untyped module at './node_modules/geobuf/index.js', which cannot be augmented.

如何创建一个声明文件,该声明文件还引用现有的Typed代码?

1 个答案:

答案 0 :(得分:0)

编写声明declare module 'geobuf'时,它应该在全局范围内。Typescript将该声明放在global.d.ts(全局名称空间)中。这是非模块中的顶级声明(其中模块是至少具有一个顶级导入或导出的文件)。

这称为Typescript Module Augmentation

因此,import Pbf = require('pbf');必须位于该模块声明中。

希望有帮助。