Visual Studio luôn báo lỗi module nhưng trình biên dịch node vẫn hoạt động khi tất cả các tệp typescript được chỉ định
Gần đây tôi đã cập nhật dự án của mình từ phiên bản 0.8.3 lên 0.9.5. Tôi đang biên dịch sang ES3 và sử dụng AMD. Tôi không kết hợp các tập tin JS thành một tập tin duy nhất. Trong thời gian phát triển, tôi tải các module một cách động bằng RequireJS. Khi biên dịch, tôi sử dụng trình tối ưu hóa RequireJS để tạo tập tin duy nhất.
Sau khi tái cấu trúc một vài thứ, tôi mắc kẹt ở hai lỗi khác nhau (xuất hiện nhiều lần).
Module cannot be aliased to a non-module type.
Unable to resolve external module '...'
Tôi có 84 tệp TypeScript và 21 tệp định nghĩa trong dự án của mình. Khi sử dụng trình biên dịch Node, tôi có thể truyền tất cả 105 tệp ts/d.ts vào bất kỳ thứ tự nào và nó biên dịch JS cho mỗi tệp mà không có lỗi hoặc cảnh báo nào. Tuy nhiên, khi tôi chỉ xác định một tệp ts duy nhất với trình biên dịch Node, tôi lại thấy các lỗi nhập module giống như những gì VS hiển thị.
Tôi đã đọc về _references.ts nhưng tôi không chắc điều đó sẽ giúp tôi trong tình huống của mình vì nó có vẻ chỉ được sử dụng khi sử dụng tùy chọn --out.
Tôi đã so sánh .csproj của mình với một ứng dụng TypeScript HTML cơ bản và nhận thấy rằng của tôi có một số mục DependentUpon mà dự án TypeScript mới không có (xem bên dưới). Tôi không chắc chúng có gây hại hay không. Loại dự án của tôi là Thư viện Lớp (Class Library) nhưng tôi đã thiết lập đúng thẻ Cài đặt Biên dịch TypeScript cũng như Tools->Options->Text Editor->TypeScript->Project.
<Content Include="js\controls\abc\models\xyz\baseRow.js">
<DependentUpon>baseRow.ts</DependentUpon>
</Content>
Tôi muốn tận dụng việc báo lỗi của VS nhưng tôi không chắc làm thế nào để giải quyết các lỗi này vào thời điểm này. Mọi gợi ý đều được hoan nghênh
Câu trả lời #1
Tôi đã tìm ra vấn đề. Phần đầu các file TypeScript của tôi có trộn lẫn ///<reference... và imports như:
///<reference path="../../../vendor/underscore/underscore.d.ts"/>
import _ = require("underscore")
///<reference path="../../../vendor/jquery/jquery.d.ts"/>
import $ = require("jql")
///<reference path="../templates/templates.d.ts"/>
import ET = require("text!controls/research/templates/edits-pane/result.html")
Hầu hết các file .d.ts của tôi đều có khai báo module ambient bên trong chúng. Khi tôi di chuyển tất cả ///<reference lên đầu, VS ngừng báo lỗi và bắt đầu biên dịch như mong đợi.
///<reference path="../../../vendor/underscore/underscore.d.ts"/>
///<reference path="../../../vendor/jquery/jquery.d.ts"/>
///<reference path="../templates/templates.d.ts"/>
import _ = require("underscore")
import $ = require("jql")
import ET = require("text!controls/research/templates/edits-pane/result.html")
Tôi không chắc điều này có phải là theo thiết kế hay không. Hy vọng nó giúp được ai đó.
Câu trả lời #2
Tôi đã gặp phải vấn đề tương tự khi có hai tệp cùng tên nhưng khác chữ hoa chữ thường. Xuất phát từ MS, TypeScript có lẽ không hỗ trợ điều này (các tệp/đường dẫn trên Windows không phân biệt chữ hoa chữ thường).
