我正在使用typings
新的React项目。我已经从--global
安装了dt
的各种库类型定义,如下所示:
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
会在其中生成~
这些模块?这些模块的用途是什么?
答案 0 :(得分:0)
有时,声明文件依赖于其他声明文件。想想例如。关于redux-form
:您在声明文件中使用了特定于redux
的类型,并且您不想重新声明这些类型。你应该只能导入它们。有两种方式可以解决这些问题:
如果您安装全局声明文件,例如。 redux-form
(typings install --global dt~redux-form
)的DefinitelyTyped版本。在安装过程中,打字会告诉你它删除了一些参考。然后你也可以安装这些。否则,您刚刚安装的声明文件可能无效,因为它正在使用来自例如的类型声明。 redux声明文件。
如果您安装模块声明文件,例如。 redux-form
,(typings install npm~redux-form
)类型的打字注册表版本对这一个依赖的其他声明文件有了更好的理解。因此,它可以生成一个声明文件,其中包含已安装的声明文件所依赖的完整声明文件。它会将这些放在'伪'模块中,以便它们可以在同一个声明文件中使用。
例如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
,打字稿可以从中认为您可以从中导入类型。 ¯\_(ツ)_/¯
但是,现在应该可以从redux-form
导入您需要的任何内容。 (import * as reduxForm from 'redux-form'
)