【发布时间】:2018-07-21 20:47:28
【问题描述】:
我正在尝试为 existing nmp module 创建定义文件。
这个模块基本上只导出一个主要功能:
module.exports = function ApiBuilder(options) {...}
它的简单形式是这样使用的:
var ApiBuilder = require('claudia-api-builder'),
api = new ApiBuilder();
module.exports = api;
api.get('/hello', function () {
return 'hello world';
});
我创建了一个简单的定义文件,如下所示:
declare module "claudia-api-builder" {
export class ApiBuilder {
constructor(options?: any);
get(uri: string, callback: Function): void;
}
}
以下源码.ts代码:
import { ApiBuilder } from 'claudia-api-builder';
const api = new ApiBuilder();
api.get('/hello', function () {
return 'hello world';
});
export default api;
被转译为以下 javascript (es2016):
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const claudia_api_builder_1 = require("claudia-api-builder");
const api = new claudia_api_builder_1.ApiBuilder();
api.get('/hello', function () {
return 'hello world';
});
exports.default = api;
上述代码失败并出现以下错误:
claudia_api_builder_1.ApiBuilder 不是构造函数
当然,转译的代码应该是:
const api = new claudia_api_builder_1();
显然,我在这里忽略了重点。 任何帮助表示赞赏。
EDIT 1:解决了以下 index.d.ts 文件的问题:
declare module "claudia-api-builder" {
/*~ This declaration specifies that the class constructor function
*~ is the exported object from the file
*/
export = ApiBuilder;
/*~ Write your module's methods and properties in this class */
class ApiBuilder {
constructor(options?: any);
get(uri: string, callback: Function): void;
}
}
现在转译过程给了我:
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const ApiBuilder = require("claudia-api-builder");
const api = new ApiBuilder();
api.get('/hello', function () {
return 'hello world';
});
exports.default = api;
这里剩下的问题是我需要更换:
导出默认api;
在打字稿代码中有
module.exports = api;
由转译过程生成
【问题讨论】:
-
试试
export default class ApiBuilder和import * as ApiBuilder from 'claudia-api-builder' -
很遗憾,您的建议如下:错误 TS2351:无法将“new”与类型缺少调用或构造签名的表达式一起使用。
标签: typescript