【发布时间】:2016-04-12 07:26:30
【问题描述】:
我有这种用 JavaScript 编写的 Node.js 模块:
function main(options) {
return "some string";
}
main.methodName = function () {
// implementation;
};
main.objectName = {
// a namespace;
};
main.propertyName = 123;
module.exports = main;
在 TypeScript 中声明这样一个接口的正确方法是什么?
澄清
我问的是如何在 TypeScript 中为现有的 Node.js 模块正确声明这样的接口,以便可以从 TypeScript 文件中正确使用它,而不是如何在 TypeScript 中重新实现这样的接口。
更新
根据@toskv 的建议,我添加了以下接口:
declare module "my-module" {
// Default library interface
interface main {
(options?:{}):string,
methodName():any,
propertyName:any,
objectName:Object
}
export default main;
}
但如果我这样使用它:
import * as myModule from "my-module";
var s = myModule({});
然后我收到错误Cannot invoke an expression whose type lacks a call signature.。
知道为什么吗?
【问题讨论】:
-
TypeScript 是 JavaScript 的超集,这意味着这段代码是有效的 JavaScript,也是有效的 TypeScript。
-
@Gothdo 虽然这是真的,但由于静态类型,TypeScript 使得在定义对象的类型之后扩展对象变得很痛苦。就像向函数添加属性一样。将代码转换为类更容易和更清晰。 :)
标签: javascript node.js typescript