Xuất khẩu hàm TypeScript "thiếu chữ ký gọi"
Tôi có một module ngoài TypeScript trong "main.ts", chỉ xuất ra một hàm duy nhất, được viết theo cách này:
// ...
import O = require('./Options');
"use strict";
function listenRestRoutes(expressApp: any, options?: O.IOptions) {
// ...
}
module.exports = listenRestRoutes;
Cái này biên dịch tốt. Và tôi có một tệp khác, nơi mô-đun này được nhập:
// ...
import express = require('express');
import mipod = require('./main');
import O = require('./Options');
// ...
var app = express();
var opts: O.IOptions = O.Options.default();
// ...
mipod(app, opts);
Dòng cuối cùng không biên dịch được, báo lỗi error TS2088: Không thể gọi một biểu thức mà kiểu của nó thiếu chữ ký gọi. mipod(app, opts);
Tôi không hiểu tại sao tôi lại gặp lỗi này. Mặc dù có lỗi này, javascript vẫn được tạo ra đúng và chạy tốt. Vậy, đây có phải là lỗi của trình biên dịch, hay là có gì đó bị lỗi trong mã của tôi?
PS: Tôi cũng đã thử thêm phần tham khảo ở đầu tệp thứ hai:
/// <reference path="./main.ts" />
Nhưng điều đó không thay đổi gì cả.
Câu trả lời #1
TypeScript không phân tích các gán module.exports để lấy thông tin kiểu. Thay vì dòng này:
module.exports = listenRestRoutes;
Sử dụng cái này
export = listenRestRoute;
