Миграция React ES6 в TypeScript: операторы импорта не работают

у меня есть проект React, написанный в настоящее время в ES6, который я переношу на TypeScript. У меня проблемы с import заявления.

в настоящее время с ES6 я установил зависимости React с помощью NPM, ex npm install react и используйте Babel с Browserify для создания выходного пакета ES5. (Использование Browserify не является требованием, я просто пытаюсь заставить TS работать с проектом.)

типичный файл React ES6 выглядит следующим образом:

import React from "react"
import {Router, Route, Link} from "react-router"
import Button from "./components/Button"

export default class App extends React.Component {
    render(){ 
        // ...
    }
}

перемещение в TS, Я установил d.ts файлы для всех моих зависимостей React с помощью tsd install react/, установить TSC module: "commonjs" и jsx: "react", конвертировать несколько файлов из *.jsx to *.tsx, и я получаю эти ошибки компиляции на import отчетность:

Ошибка: (1, 8) TS1192: модуль"react" не имеет экспорта по умолчанию.

на import Button заявление не дает никакой ошибки. Кажется, TSC не может разрешить зависимости модуля NPM.

как я могу получить это работа?

2 ответов


TypeScript 1.8+

компилировать с --allowSyntheticDefaultImports-добавить "allowSyntheticDefaultImports": true to tsconfig.в JSON

Примечание: это не работает для меня, когда параметр module на tsconfig.в JSON to commonjs хотя.

альтернативно...

используйте этот код:

import * as React from "react";
import * as Router from "react-router";

// use React, Router.Router, Router.Route, and Router.Link here

подробнее здесь и здесь. В настоящий момент react.d.ts использует export = и поэтому вам нужно импортировать его, выполнив import * as React.

в основном эти библиотеки имеют только один экспорт. Это представление в файле определения с помощью export =.


чтобы использовать следующий синтаксис:

import React from 'react';

вам нужно установить эти два флага в tsconfig.json:

{ "allowSyntheticDefaultImports": true, "esModuleInterop": true }

протестировано со следующими версиями:
Typescript 2.9.2
@types / react 16.4.7
реагировать 16.4.1