visual studio - Tùy chọn "Kết hợp đầu ra JavaScript vào tệp" của TypeScript không suy ra đúng thứ tự script nếu không có thẻ ///
Tôi đang làm việc trên một giải pháp TypeScript sử dụng tùy chọn "Kết hợp đầu ra JavaScript vào file":
Tôi thường tham chiếu đến một mục được định nghĩa trong một tệp khác, ví dụ:
Trong MyBaseClass.ts:
export class MyBaseClass { }
Trong MySubClass.ts:
export class MySubClass extends MyBaseClass { }
Trong khi phát triển, Visual Studio không gặp vấn đề gì khi hiểu rằng MySubClass tham chiếu đến MyBaseClass được định nghĩa trong MyBaseClass.ts - giải pháp xây dựng thành công và tôi có thể điều hướng đến MyBaseClass bằng F12.
Tuy nhiên, tôi gặp lỗi thời gian chạy khi chạy giải pháp vì tệp JavaScript được tạo định nghĩa MySubClass trước MyBaseClass.
Tôi có thể sửa các lỗi thời gian chạy này bằng cách thêm một thẻ /// <reference> trong MySubClass.ts:
/// <reference path="MyBaseClass.ts" />
export class MySubClass extends MyBaseClass { }
Tại sao IDE hiểu mối quan hệ giữa MySubClass và MyBaseClass, nhưng trình biên dịch không sắp xếp đúng thứ tự định nghĩa của các lớp này trong đầu ra được tạo ra?
Tôi muốn hoặc là đầu ra được tạo ra suy luận chính xác thứ tự của các định nghĩa lớp (ưu tiên) hoặc trình biên dịch TypeScript báo lỗi nếu các thẻ /// <reference> không có mặt.
Câu trả lời #1
Tại sao IDE lại hiểu mối quan hệ giữa MySubClass và MyBaseClass,
Nó chỉ biết mối quan hệ ngữ nghĩa. Không biết các yêu cầu thời gian chạy. Cách bạn thực hiện việc tải mô-đun là tùy bạn.
Lưu ý: https://github.com/TypeStrong/grunt-ts#reference và https://github.com/TypeStrong/grunt-ts#javascript-generation
Câu trả lời #2
Tôi thực sự ước gì điều này có thể được sửa. Intellisense của Typescript dường như không gặp bất kỳ vấn đề gì trong việc suy luận thứ tự đúng. Khi trình biên dịch, có tùy chọn "Kết hợp thành một tệp", không giải quyết được vấn đề này, nó khiến các tệp js lớn ban đầu trở nên không đáng tin cậy... Phản ứng thông thường đối với vấn đề này là sử dụng tải động... điều đó là đúng. Nhưng trong trường hợp của tôi, các mô-đun được tải động, đã tồn tại nhiều lớp trong các dự án riêng biệt được biên dịch thành một tệp duy nhất. Do đó, vấn đề cũng tồn tại trong kịch bản đó...
