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

时间:2018-11-30 03:06:11

标签: javascript typescript visual-studio-code intellisense typescript-typings

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

我已经尝试过的事情:

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

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

这不起作用。我怀疑是因为redux/index.d.ts文件根本没有声明名称空间。当我编辑redux/index.d.ts文件并用declare namespace Redux { ... }将所有文件包装在那里时,一切正常。我在redux@^4.0.0上。

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

除非我安装了NPM软件包@types/redux/@3.6.31,否则它不起作用,该软件包的键入过时与发布的不匹配。 @types/redux软件包的最新版本只是一个已弃用的占位符,该占位符表示使用官方的redux软件包键入(无效)。

  1. import { Middleware } from "redux";

当我将上面显示的import语句放入我的index.d.ts文件中时,文件中的每个声明都中断了(即,我依赖于自己的index.d.ts文件的其他所有类型)停止从中读取所有类型。)根据我的阅读,在import文件的类型上放置d.ts语句会使Typescript将该文件视为模块,而不是定义文件。< / p>

无效(IMO)的解决方法虽然可行,但实际上不起作用:

  1. 安装NPM软件包@types/redux@3.6.31,而不是不推荐的最新@types/redux占位符版本。
  2. 编辑我的node_modules/redux/index.d.ts副本以将所有内容包装在名称空间中,例如declare namespace Redux { ... }

其他信息:

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

1 个答案:

答案 0 :(得分:5)

自打字稿2.9(see section on import types)起,您可以使用import()使用类型定义文件,而无需实际导入模块本身。例如,此定义将使用redux包中的Action类型进行工作:

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

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