首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从声明文件中的库中导入和引用类型

如何从声明文件中的库中导入和引用类型
EN

Stack Overflow用户
提问于 2021-08-27 14:17:45
回答 1查看 601关注 0票数 1

问题

如何从.d.ts声明文件中的库导入类型?

背景

我正在编写一个cf.d.ts文件,为我的应用程序保存一个具有通用类型的自定义命名空间。这样,我不需要在任何地方导入我想要引用的Foo模块

代码语言:javascript
复制
declare namespace CF {
  export type Foo = number
}

对于包装原语的类型(或我的声明文件中的其他自定义类型),这足够有效。但是,我现在想提到来自我所依赖的包的类型。在本例中,我想引用来自Instance包的IAnyTypemobx-state-tree类型:

代码语言:javascript
复制
declare namespace CF {
  /**
   * Represents the parameters to a query
   */
  export type QueryParams<
    F extends Instance<IAnyType>,
    R extends Instance<IAnyType>,
  > = [F[], R[], number]
}

正如所写的,InstanceIAnyType被推断为any,因为TS不知道这些类型来自何处。在这些类型上获得准确的键入的唯一方法是将import('mobx-state-tree').添加到这些类型的每一种用法中:

代码语言:javascript
复制
declare namespace CF {
  /**
   * Represents the parameters to a query
   */
  export type QueryParams<
    F extends import('mobx-state-tree').Instance<import('mobx-state-tree').IAnyType>,
    R extends import('mobx-state-tree').Instance<import('mobx-state-tree').IAnyType>,
  > = [F[], R[], number]
}

出于明显的原因,我想避免这种冗长,并将它们导入到声明中的一个位置,然后引用它们,但是如果我import { ... } from 'mobx-state-tree',那么任何引用CF命名空间的模块都无法看到QueryParams类型。

我尝试过的其他事情:

  • import type { ... } from 'mobx-state-tree'
  • /// <reference types="mobx-state-tree" />
  • import MST = require('mobx-state-tree') (然后使用MST.Instance<...>)

)

EN

回答 1

Stack Overflow用户

发布于 2022-10-03 13:32:07

我不知道您现在是否已经解决了这个问题,但是添加导入的问题是它将d.ts从一个script (全局)更改为一个module (本地)声明。使此工作的方法是将类型包装在declare global中。

代码语言:javascript
复制
import type { Instance, IAnyType } from 'mobx-state-tree'

declare global {
  namespace CF {
    /**
     * Represents the parameters to a query
     */
    export type QueryParams<
      F extends Instance<IAnyType>,
      R extends Instance<IAnyType>,
      > = [F[], R[], number]
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68954975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档