Ho un progetto React attualmente scritto in ES6 che sto migrando a TypeScript. Ho problemi con le istruzioni import
.Migrazione di React ES6 a TypeScript: le istruzioni di importazione non funzionano
Attualmente con ES6 ho installato le dipendenze React utilizzando NPM, ex npm install react
e uso Babel con Browserify per creare un pacchetto ES5 di output. (Usando Browserify non è un requisito, sto solo cercando di ottenere TS lavorare con il progetto.)
Un tipico file di Reagire ES6 è simile al seguente:
import React from "react"
import {Router, Route, Link} from "react-router"
import Button from "./components/Button"
export default class App extends React.Component {
render(){
// ...
}
}
Entrando nel TS, ho installato d.ts
file per tutti i miei dipendenze Reagire utilizzando tsd install react/
, impostare TSC module: "commonjs"
e jsx: "react"
, convertiti alcuni file *.jsx
-*.tsx
, e ottengo questi errori di compilazione sui import
dichiarazioni:
Error:(1, 8) TS1192: Module '"react"' has no default export.
L'istruzione import Button
non dà errori. Sembra che TSC non sia in grado di risolvere le dipendenze del modulo NPM.
Come posso farlo funzionare?
Grazie, funziona. Ancora un po 'di nebbia su quale sia la differenza. Che dire '{Router, Route, Link} da 'react-router''? C'è un modo per farlo? – Aaron
Accettato. :) Ancora un po 'confuso, anche se ... quindi il motivo '* as' è necessario perché' d.ts' usa 'export =', ma pensavo che fosse equivalente a ES6 'default di esportazione' che sarebbe stato importato usando 'import React da 'react''? Non mi è chiaro perché abbia funzionato con Babel/Browserify ma la semantica sembra essere cambiata con TSC. Immagino che sia una differenza nel modo in cui i moduli vengono risolti? – Aaron
Non sono sicuro della sintassi 'ReactRouter.Router'. Il codice JS esistente funzionava come 'Router', quindi come funziona 'import * come ReactRouter' in runtime? – Aaron