带导入的环境模块声明

时间:2018-05-10 13:48:25

标签: typescript

我创建一个环境模块来补充缺少的打字。我可以创建一个typings.d.ts文件,当我在代码的其他位置导入它时,除​​doSomething的返回类型为any外,一切都很好。为了解决这个问题,我将一个已知库中的正确类型导入typings.d.ts,这样可以为环境模块提供正确的类型。

由于某些原因,当我这样做时,环境模块的import语句会中断。

typings.d.ts

import { Tree } from '@otherLib/core' /// <=== Adding this breaks the ambient declaration below

declare module '@lib/missingTypings' {
    export function doSomething(message: string): Tree
}

在上面的例子中,我想从另一个库中提供Tree的正确返回类型。

2 个答案:

答案 0 :(得分:0)

在我看来,这个奇怪的错误会影响Visual Studio Typescript语言服务(编辑器无法识别模块),而Babel会毫无问题地编译代码。

This answer为我解决了该问题,但是我仍然不相信为什么在动态导入语法有效的情况下使用静态导入的代码无法正常工作。

答案 1 :(得分:0)

如果您添加顶级导入/导出,您的声明将不再是环境。为了确保您仍然有环境声明,您需要在 declare 块内进行导入,但是由于与模块是否应该被混淆,打字稿目前不允许您在声明块内使用相对导入相对于类型定义文件或相对于使用类型定义的使用者文件解析,因此实现您正在尝试执行的操作的正确方法是使用 import() 语法 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html#import-types

我在这里写了更多关于这个: https://stackoverflow.com/a/66768386/2054671