2015-11-19 17 views
9

Şu anda Type6'ya geçiş yaptığım ES6'da yazılmış bir React projem var. import ifadeleri ile sorun yaşıyorum.React ES6'yı TypeScript'e Geçiş: İçe aktarma ifadeleri çalışmıyor

Şu anda ES6 ile NPM, npm install react kullanarak React bağımlılıkları kurdum ve bir çıkış ES5 paketi oluşturmak için Browserfy ile Babel'i kullanın. (Browserify Kullanılması Sadece TS projesi ile çalışan almak için çalışıyorum, bir gereklilik değildir.)

Tipik ES6 dosya şuna benzer tepki:

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 taşınırken, ben yükledim TSC module: "commonjs" ve jsx: "react" set tsd install react/ kullanarak tüm tepki bağımlılıkları için d.ts dosyaları *.tsx için *.jsx birkaç dosya dönüştürülür ve ben bu import tablolarda derleme hatası alıyorsunuz:

Error:(1, 8) TS1192: Module '"react"' has no default export.

import Button ifadesi hata veriyor. TSC, NPM modül bağımlılıklarını çözemiyor gibi görünüyor.

Bunu nasıl çalıştırabilirim? ile

cevap

18

typescript 1.8+

Derleme --allowSyntheticDefaultImports -add "allowSyntheticDefaultImports": true

Not tsconfig.json için:-tsconfig.json yılında module ayarlarken bu benim için çalışmıyor commonjs olsa da. Alternatif

...

bunu kullanın yerine:

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

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

here ve here daha okuyun. Şu anda react.d.ts, export = kullanıyor ve import * as React yaparak içe aktarmanız gerekiyor.

Temel olarak bu kitaplıkların yalnızca bir tanesi vardır. Bu, export = ile tanım dosyasında temsil edilir.

+0

Teşekkürler, bu işe yarıyor. Hala ne fark olduğu hakkında biraz sisli. 'Tepki-yönlendiriciden' {Router, Route, Link} ne hakkında? Bunu yapmanın bir yolu var mı? – Aaron

+0

Kabul edildi. :) Yine de biraz kafam karışmıştı ... bu yüzden, çünkü '' as' gereklidir, çünkü 'd.ts'' export = 'kullanır, fakat bunun ithal edilen ES6'nın ihracat varsayılanına eşdeğer olduğunu düşünmüştüm 'import '' reakt '' ifadesinden yararlanarak? Babel/Browserify ile neden çalıştığı bana açık değil ama semantikleri TSC ile değişti. Modüllerin nasıl çözüldüğünün farkı nedir? – Aaron

+0

Ayrıca 'ReactRouter.Router' sözdizimi hakkında emin değilim. Mevcut JS kodu "Router" olarak çalıştı, böylece ReactRouter olarak içe aktarma * çalışma zamanında nasıl çalışacak? – Aaron

İlgili konular