2015-10-04 19 views
7

Tôi đang cố gắng tạo luồng công việc, nơi tôi có thể viết các mô-đun React bằng cách sử dụng TypeScript và biên dịch tự động sang JavaScript qua Gulp.js. Tôi đang sử dụng TypeScript 1.6.2, gulp-react và gulp-typescript.TypeScript, React và Gulp.js - xác định phản ứng

tập tin .tsx tôi trông như thế này bây giờ:

/// <reference path="../../../../typings/react/react.d.ts" /> 
import React = __React; 
interface HelloWorldProps { 
    name: string; 
} 

var HelloMessage = React.createClass<HelloWorldProps, any>({ 
    render: function() { 
     return <div>Hello {this.props.name}</div>; 
    } 
}); 
React.render(<HelloMessage name="helloooo" />, document.getElementById('test')); 

Vấn đề của tôi là dòng này: import React = __React;

Khi tôi rời nó ra, tôi nhận được lỗi

lỗi TS2304: Không thể tìm tên 'React'.`

khi biên dịch .tsx thành .js (nhưng nó vẫn biên dịch sang JSX và tôi có thể sử dụng đầu ra). Khi tôi đặt nó vào, tôi có thể biên dịch mà không có lỗi, nhưng khi tôi cố gắng sử dụng các tập tin bên trong trình duyệt, tôi nhận được một Uncaught ReferenceError: __React is not defined, tất nhiên.

Đây là cách gulptask của tôi trông giống như:

gulp.task('gui-tsx', function() { 
    var tsResult = gulp.src(config.guiSrcPath + 'tsx/app.tsx') 
     .pipe(ts({ 
      jsx: 'react' 
     })); 
    return tsResult.js.pipe(gulp.dest(config.guiSrcPath + 'jsx')); 
}); 

Có một cách giải quyết cho việc này? Hay tôi đang thiếu thứ gì đó ở đây?

Trả lời

4

OK, tôi đã tìm được giải pháp. Đầu tiên cài đặt các Phản ứng định nghĩa toàn cầu qua tsd:

tsd install react-global 

này sẽ tạo ra một tập tin, react-global.d.ts, trong thư mục typings của bạn, mà bạn phải tham khảo trong bạn tập tin thành phần gốc (đường dẫn là tương đối, vì vậy điều chỉnh nó để bạn nhu cầu):

/// <reference path="../../../../typings/react/react-global.d.ts" /> 

Sau đó nó biên dịch không có lỗi.

+0

Có bất kỳ giải pháp tương tự khi sử dụng 'typings' thay vì' tsd'? – jpierson

2

nơi tôi có thể viết phản ứng module sử dụng nguyên cảo và biên dịch tự động để js qua ngụm

Rất khuyên bạn không sử dụng các module toàn cầu. Thay vào đó biên dịch với --module commonjs và nắm lấy hệ sinh thái phản ứng/webpack/nútjs.

Bạn có thể kiểm một ứng dụng ví dụ ở đây: https://github.com/basarat/tsb/tree/master

+1

Xin cảm ơn câu trả lời! Lý do tại sao tôi không nên làm điều đó là gì? Đây có phải là trường hợp tôi muốn tải các thư viện bên ngoài mà tôi không thể yêu cầu sau đó và phải tải chúng thông qua thẻ script? –

+0

Trong khi tôi nghĩ rằng câu trả lời này là đúng cách để đi, có quá ít lời giải thích cho tôi để có thể sử dụng nó từ các ứng dụng mẫu được đề cập. Các mô-đun của tôi đang tham chiếu '__React' vì bất kỳ lý do gì trong khi cố gắng sao chép kiểu từ mẫu. –

+0

Tôi đã gặp các vấn đề sau lời khuyên này cũng như chủ yếu là do __React toàn cầu cũng như rất nhiều các tập tin khai báo gói phản ứng. http://stackoverflow.com/questions/38441400/issues-installing-react-related-type-definitions-with-typings – jpierson

Các vấn đề liên quan