2012-11-12 45 views
27

Chúng tôi có một hệ thống JavaScript đã có.Cách di chuyển từ từ sang/di chuyển sang TypeScript trong hệ thống JavaScript hiện có

Điều chúng tôi muốn làm: Chúng tôi muốn bắt đầu tích hợp TypeScript vào hệ thống hiện tại; Chúng tôi không thể chuyển mọi thứ sang TypeScript. Chúng tôi muốn từ từ bắt đầu viết một số mô-đun mới trong TypeScript.

Những gì chúng tôi đã thử: Chúng tôi sử dụng mẫu để tổ chức mô phỏng mã JS của chúng tôi thành cấu trúc MODULE TypeScript.

Chúng tôi đã cố gắng viết lại một lớp/đối tượng đơn giản trong TypeScript và đã thành công nhưng chúng tôi gặp sự cố khi truy cập các hàm JS được định nghĩa trong mã của chúng tôi, trong các tệp khác.

vấn đề gặp phải: Chúng tôi đã phải tạo ra các giao diện giả, và chức năng giả sử dụng những giao diện vv

Vậy câu hỏi: thể ai bình luận, những gì sẽ là phương pháp tốt nhất để dần dần hòa nhập nguyên cảo vào một hệ thống JavaScript hiện có.

Trả lời

30

Có vẻ như bạn có một kế hoạch hợp lý. Dưới đây là những quan sát của tôi! Tốt nhất là đảm bảo bạn TypeScript phụ thuộc vào JavaScript của bạn và không phải là cách khác xung quanh nếu có thể. Điều này là bởi vì nó rất dễ dàng để tái cấu trúc TypeScript bằng cách sử dụng các công cụ Visual Studio, nhưng nó sẽ không refactor JavaScript mà gọi TypeScript của bạn.

Bạn sẽ phải ghi tệp định nghĩa cho các phần của JavaScript mà bạn cần gọi từ TypeScript. Bạn sẽ cần phải cân bằng chi phí viết một định nghĩa với chi phí đơn giản là chuyển đổi JavaScript thành TypeScript.

Nếu bạn chỉ đang gọi một hàm, chỉ cần viết định nghĩa cho hàm đó - đừng viết định nghĩa cho đến khi bạn cần. Điều này sẽ giữ cho chi phí gọi mã cũ của bạn thấp hơn.

Bạn cũng có thể tạm thời sử dụng loại any để tránh xa mọi thứ trên mã JavaScript của mình. Khi bạn chuyển đổi tệp sang TypeScript, bạn sẽ nhận được kiểm tra loại tốt hơn. Đây là điểm quyết định "nó phụ thuộc". Thay vì dành thời gian viết một định nghĩa, bạn có thể tiết kiệm thời gian với chi phí kiểm tra loại.

Ví dụ ...

declare var MyExistingClass: any; 

Bây giờ bạn có thể gọi ...

var example = new MyExistingClass.Anything(); 
example.anythingYouLike(); 

Bạn phải quyết định như một đội bóng cho dù đây là có thể chấp nhận hoặc nếu bạn muốn viết định nghĩa:

declare class MyExistingClass { 
    anythingYouLike(): void; 
} 

Tôi hy vọng điều này sẽ hữu ích.

+0

Cảm ơn Steve! Có điều này giúp, tốt để biết những gì các tùy chọn được. Vấn đề là, chúng tôi hiện đang thêm rất nhiều mã cụ thể trong khi hầu hết các mã tái sử dụng đã được viết; dễ dàng để biện minh cho việc cố gắng đánh máy trên một cái gì đó mới, không quá nhiều vào việc viết lại các mô-đun thử nghiệm. nhưng điều này có nghĩa là rất nhiều định nghĩa để viết. Vì vậy, không có cách nào để chỉ cần nhập một tệp JS để TypeScript ít nhất nhận thức được rằng một số hàm tồn tại? –

+0

Bạn có thể thấy rằng nếu bạn dán JavaScript của bạn vào một tệp TypeScript, trình biên dịch sẽ có thể suy ra tất cả các loại cho bạn, nhưng bạn thường thấy JavaScript của bạn chứa một số không tương thích cần được sửa. – Fenton

16

Đây là điều chúng tôi gần đây đã phải đối mặt với việc chuyển động cơ trò chơi HTML5 của khoảng 100.000 dòng mã JavaScript sang TypeScript. Chúng tôi nhất thiết phải làm điều đó trong các giai đoạn, bắt đầu bằng cách đổi tên các tệp từ .js thành .ts và dần dần tiến hành từ đó.Mô tả đầy đủ là ở đây cho bất cứ ai đang quan tâm:

http://hardcodeded.blogspot.jp/2013/02/mostly-painlessly-migrating-3d-game.html

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