如何在 index.d.ts 打字稿定义文件中引用 Redux 类型?

Posted

技术标签:

【中文标题】如何在 index.d.ts 打字稿定义文件中引用 Redux 类型?【英文标题】:How to reference Redux types in index.d.ts typescript definition file? 【发布时间】:2019-05-02 04:51:58 【问题描述】:

我想创建一个 index.d.ts 文件,该文件引用流行的 NPM 包中的某些类型,称为 redux

我已经尝试过的事情:

(在我的 index.d.ts 文件的顶部)

    /// <reference path="../../../node_modules/redux/index.d.ts" />

这不起作用。我怀疑这是因为 redux/index.d.ts 文件根本没有声明命名空间。当我编辑redux/index.d.ts 文件并用declare namespace Redux ... 包装其中的所有内容时,一切正常。我在redux@^4.0.0

    /// <reference types="redux" />

这不起作用,除非我安装 NPM 包 @types/redux/@3.6.31,它有旧的过时类型,与已发布的类型不匹配。最新版本的@types/redux 包只是一个已弃用的占位符,它说要使用官方的redux 包类型(不起作用)。

    import Middleware from "redux";

当我将上面显示的import 语句放入我的index.d.ts 文件中时,文件中的每个声明都损坏了(即,我依赖于我自己的index.d.ts 文件类型的所有其他地方都完全停止读取任何类型从它。)根据我的阅读,将import 语句放在d.ts 文件的类型上会导致Typescript 将该文件视为模块,而不是定义文件。

不好的 (IMO) 变通办法,有点工作,但不是真的:

    安装 NPM 包 @types/redux@3.6.31,而不是最新的已弃用占位符版本 @types/redux。 编辑我的 node_modules/redux/index.d.ts 副本以将所有内容包装在命名空间中,例如declare namespace Redux ...

其他信息:

我的项目是使用 create-react-app v2 作为 javascript 项目启动的。我只是使用d.ts 文件来记录一些接口。我的编辑器是 VSCode 最新/稳定的。

【问题讨论】:

嗨,你试过https://redux.js.org/basics/usagewithreact 【参考方案1】:

从 typescript 2.9 (see section on import types) 开始,您可以使用 import() 来使用类型定义文件,而无需实际导入模块本身。例如,此定义将使用 redux 包中的 Action 类型:

declare function createCustomAction(): import("redux").Action

不需要使用三斜杠指令在顶部引用任何内容。

【讨论】:

我很早就发现了这个策略,实际上我一直在我的 JSDoc cmets 中使用它。既然有用,那我就给分吧。但是,它最终不是我特定情况的答案。你可以在这里看到我做了什么 - github.com/reduxjs/redux/issues/3231#issuecomment-444554348

以上是关于如何在 index.d.ts 打字稿定义文件中引用 Redux 类型?的主要内容,如果未能解决你的问题,请参考以下文章

“module/index.d.ts”和“@types/module/index.d.ts”之间的打字稿冲突

在打字稿中找不到名称“省略”

找不到打字稿类型声明

打字稿找不到本地链接的模块?

打字稿定义无法导入Angular2

(打字稿)试图将字体真棒图标作为对象传递给子组件时遇到问题