【问题标题】:Cannot reference @types definitions in a global d.ts? [duplicate]无法在全局 d.ts 中引用 @types 定义? [复制]
【发布时间】:2017-12-05 00:15:35
【问题描述】:

在我的项目中有一个全局/环境 d.ts 文件,如下所示:

/// <reference types="moment" />

declare interface SomeSharedInternalType {
    date: moment.Moment;
}

但是,编译器抱怨

找不到命名空间'moment'

显然,我不能为此使用import,因为这些声明必须保持不变,那么如何引用这些类型定义?

【问题讨论】:

    标签: typescript


    【解决方案1】:
    import * as moment from 'moment'
    

    将只导入类型定义,因此保持环境 - 它不会编译任何时刻 JS

    EDIT 稍微误读了这里的问题,所以为了清楚起见,这对于将 defs 环境拉入 TS 项目是正确的(这里的环境意味着它允许您使用类型,而无需任何引用模块在编译后的 JS 中被释放) - 但是,它不会保持 .d.ts 文件环境(这里的环境意味着其中声明的类型不需要由使用它们的模块导入,本质上使它们成为全局类型,文件本身通过tsconfig.json配置包含在项目中)

    【讨论】:

    • 不,它会将整个d.ts文件变成一个“模块”声明,这意味着它在被其他.ts文件使​​用时也必须导入。我希望它保持环境/全局。 IE。 d.ts 文件中的任何 importexport 语句将整个文件放入命名空间中。
    • 抱歉,我误以为您想在环境中引入时刻类型,但实际上您希望 def 文件本身保持环境。 TS 这个词有很多令人困惑的用法!在那种情况下,我认为这是不可能的,因为需要分配类型 defs,因为它们没有声明全局 moment。就目前而言,引用将被拉入,但导出的命名空间尚未分配或声明为全局名称,这将使您自己的 defs 无法访问它
    猜你喜欢
    • 2017-10-07
    • 2017-09-20
    • 2019-07-05
    • 2015-10-10
    • 2017-04-06
    • 2019-11-09
    • 2017-07-03
    • 2012-07-31
    • 2015-08-08
    相关资源
    最近更新 更多