【问题标题】:ambient module declaration with import带导入的环境模块声明
【发布时间】:2018-10-20 19:35:44
【问题描述】:

我正在创建一个环境模块来补充缺失的类型。我可以创建一个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

【问题讨论】:

    标签: typescript


    【解决方案1】:

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

    This answer 为我解决了这个问题,但我仍然不明白为什么静态导入的代码不起作用而动态导入语法起作用。

    【讨论】:

      【解决方案2】:

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

      我在这里写了更多关于此的内容: https://stackoverflow.com/a/66768386/2054671

      【讨论】:

        猜你喜欢
        • 2016-08-30
        • 2012-10-12
        • 2012-11-08
        • 2015-10-17
        • 2021-11-02
        • 2021-11-04
        • 1970-01-01
        • 2019-04-13
        • 2014-10-16
        相关资源
        最近更新 更多