/ / TypeScript-Modul entfällt, wenn es nur als Alias ​​verwendet wird - Modul, Typoskript, Reaktionsrouter

TypeScript-Modul wird weggelassen, wenn es nur als Alias ​​verwendet wird - Modul, Typoscript, Reakt-Router

Ich habe eine Import-Anweisung eines NPM-Moduls wie folgt:

import * as ReactRouter from "react-router"

Welche transpiles verwenden module: "commonjs" zu:

var ReactRouter = require("react-router");

Und ich habe Zugang zu ReactRouter.Routerusw. in meinem JSX. Das funktioniert zum Beispiel:

render(){
return (
<ReactRouter.Router>
<ReactRouter.Route path="/" component={App}>
<ReactRouter.IndexRoute component={Index} />
<ReactRouter.Route path="detail/:id" component={Detail} />
{/* etc */}
</ReactRouter.Route>
</ReactRouter.Router>
)
}

Ich möchte jedoch Aliase zu erstellen Routeusw., also muss ich nicht verweisen ReactRouter.* überall:

import * as ReactRouter from "react-router"
import Router = ReactRouter.Router
import Route = ReactRouter.Route
import IndexRoute = ReactRouter.IndexRoute

render(){
return (
<Router>
<Route path="/" component={App}>
<IndexRoute component={Index} />
<Route path="detail/:id" component={Detail} />
{/* etc */}
</Route>
</Router>
)
}

Aber wenn ich das tue, wird der transpilierte Code wie folgt:

var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var IndexRoute = ReactRouter.IndexRoute;

Beachten Sie die ReactRouter Modul selbst ist nirgendwo und zur Laufzeit bricht es weil ReactRouter ist nicht definiert. Wenn ich jedoch mindestens einen beliebigen Verweis auf ReactRouter es zeigt sich:

// TS
import * as ReactRouter
import Router = ReactRouter.Router
ReactRouter // reference to force ReactRouter module to be compiled

// Transpiles to:
var ReactRouter = require("react-router");
var Router = ReactRouter.Router;
ReactRouter;

Und dann funktioniert es zur Laufzeit.

Mit anderen Worten, es scheint, dass ein Import-Aliaszählt nicht als Referenz, obwohl es wirklich ist. Ist das ein TSC-Fehler? Gibt es eine andere Problemumgehung als das Erstellen eines zusätzlichen Verweises auf das Modul, damit TSC ihn nicht auslässt? Gibt es eine bessere Möglichkeit, diese einzelnen Symbole aus dem zu importieren? react-router Modul, wie import {Router, Route, IndexRoute} from "react-router" kann mit Babel gemacht werden?

Antworten:

2 für die Antwort № 1

Das ist ein Compiler-Fehler. Es war Fest vor einiger Zeit und Sie können auch npm install typescript@next oder verwenden Sie TypeScript 1.7, sobald es verfügbar ist.

Referenzierung ReactRouter in einem Ausdruck ist die beste Problemumgehung.