键入生成的“~”模块

Typings generated "~" modules

我正在 typings 中使用一个新的 React 项目。我已经从 dt 安装了各种库类型定义为 --global,像这样:

typings install dt~redux --global --save

我正在使用 IntelliJ IDEA,我注意到当它建议导入某些东西时,它会在一堆以 ~ 开头的模块中找到它。这是什么?

例如,如果我在 Redux IDispatch 上请求导入建议,我会得到以下建议:

~redux-thunk~redux/redux
~react-router-redux~redux/redux
~react-redux~redux/redux
~redux/redux

生成这样的导入语句:

import {IDispatch} from "~redux-thunk~redux/redux";

我期望的是:

import {IDispatch} from "redux";

这是怎么回事?为什么 typings 会生成这些包含 ~ 的模块?这些模块的预期用途是什么?

有时,声明文件依赖于其他声明文件。想想例如。关于 redux-form:您在声明文件中使用了特定于 redux 的类型,并且您不想重新声明这些类型。您应该能够导入它们。打字有两种方式处理这些:

  • 如果安装 全局声明文件,例如。 redux-form (typings install --global dt~redux-form) 的 DefinitelyTyped 版本。在安装过程中,打字会告诉你它删除了一些引用。然后由您来安装这些。否则,您刚刚安装的声明文件可能无效,因为它正在使用来自 eg 的类型声明。 redux 声明文件。

  • 如果你安装一个模块声明文件,例如。 redux-form、(typings install npm~redux-form) typings 的 typings 注册表版本可以更好地理解该版本依赖于哪些其他声明文件。因此,它可以生成一个声明文件,其中包含已安装文件所依赖的完整声明文件。它将把它们放在 'pseudo' 模块中,这样它们就可以在同一个声明文件中使用。

    例如 redux-form,生成的 typings/modules/redux-form/index.d.ts 文件将包含

    declare module '~redux-form~redux' { /* actual redux typings */ } 
    

    再往下,在 redux-form 模块声明中,您会看到:

    import { IDispatch as Dispatch, IReducer as Reducer } from '~redux-form~redux';
    

    the original 只是从 redux 导入。

    缺点:这会创建一些模块 ~redux-form~redux,typescript 认为您可以从中导入类型。 ¯\_(ツ)_/¯ 但是,现在应该可以从 redux-form 导入任何你需要的东西了。 (import * as reduxForm from 'redux-form')