2016-07-21 7 views
1

Ich verwende typings mit einem neuen React-Projekt. Ich habe verschiedene Bibliothek Typdefinitionen als --global von dt, wie diese installiert:Typings generiert "~" Module

typings install dt~redux --global --save 

Ich benutze IntelliJ IDEA und ich habe bemerkt, dass, wenn es etwas zu importieren schlägt er es in einem Bündel von Modulen stellt fest, dass Beginnen Sie mit ~. Was ist das?

Zum Beispiel, wenn ich für den Import Vorschlag bitten, auf Redux IDispatch ich Anregungen für:

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

Welche Import-Anweisungen wie folgt erzeugen:

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

Was ich erwarte, ist:

import {IDispatch} from "redux"; 

Was ist hier los? Warum erzeugt typings diese Module mit ~ in ihnen? Was ist der beabsichtigte Einsatz dieser Module?

Antwort

0

Manchmal hängen Deklarationsdateien von anderen Deklarationsdateien ab. Denke z. Über redux-form: Sie verwenden Typen in Ihrer Deklarationsdatei, die für redux spezifisch sind, und Sie möchten diese nicht deklarieren. Sie sollten nur in der Lage sein, sie zu importieren. Es gibt zwei Möglichkeiten Typisierungen diese Griffe:

  • , wenn Sie installieren eine globale Deklarationsdatei, zum Beispiel. die DefinitelyTyped-Version von redux-form (typings install --global dt~redux-form). Bei der Installation wird Ihnen mitgeteilt, dass einige Referenzen entfernt wurden. Dann liegt es an Ihnen, diese auch zu installieren. Andernfalls ist die von Ihnen gerade installierte Deklarationsdatei wahrscheinlich ungültig, da sie Typdeklarationen von zB verwendet. die redux-Deklarationsdatei.

  • Wenn Sie eine Modul Deklarationsdatei, z. die typings registry version von redux-form, (typings install npm~redux-form) typings hat ein viel besseres Verständnis darüber, von welchen anderen Deklarationsdateien diese abhängt. Als Ergebnis kann eine Deklarationsdatei generiert werden, die die vollständigen Deklarationsdateien enthält, von denen die installierte Deklarationsdatei abhängt. Es wird diese in "Pseudo" -Module setzen, so dass sie innerhalb derselben Deklarationsdatei verwendet werden können.

    Eg für redux-form, die erzeugte typings/modules/redux-form/index.d.ts Datei

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

    Und weiter unten, im Innern der redux-form Moduldeklaration enthalten wird, werden Sie sehen:

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

    während the original wird gerade von redux Import .

    Der Nachteil: Dies schafft einige Modul ~redux-form~redux aus denen Typoskript denken könnte, dass Sie Typen importieren können. ¯\_(ツ)_/¯ Allerdings sollte es jetzt möglich sein, einfach alles, was Sie benötigen, von redux-form zu importieren. (import * as reduxForm from 'redux-form')

+0

Das macht Sinn ...aber wenn ich 'import {IDispatch} von" redux "' versuche und 'dispatch: IDispatch' deklariere, kann ich keine Funktion an' dispatch() 'übergeben, wie es redux-thunk erlaubt, weil vanilla' redux' das nicht tut Ich weiß, du kannst das tun. Es funktioniert, wenn ich {IDispatch} von "~ redux-thunk ~ redux" importiere, aber ich mag das nicht wirklich ... – Aaron

Verwandte Themen