为VS Code IntelliSense创建现有Node.js模块的TypeScript接口

时间:2016-04-16 17:09:52

标签: node.js typescript visual-studio-code

考虑以下Node.js项目结构:

- entities
    - customer.js
- node_modules
- typings
- index.js
- jsconfig.json
- package.json

如果有entities/customer.js这样的话:

function Customer() {
    this.firstname = null;
    this.lastname = null;
    this.orders = []
}

Customer.prototype.addOrder = function (order) {
    this.orders.push(order);
};)

module.exports = Customer

./index.js中,使用了entities/customer.js

let Customer = require('./entities/customer');
let customer = new Customer();
customer.firstname = "John";
customer.lastname = "Doe"; 
customer.addOrder({ amount: 5, product : 'Apple' })

我如何声明一个TypeScript interface来支持VS Code IntelliSense,不仅可以显示addOrder(param: any): void,还可以将所有内容放在哪里? 我不想让TypeScript实现替换当前的Customer模块。

当然,我可以使用JSDoc注释(感谢VS Code中的Salsa语言服务):

/**
 * @param {{amount: number, product: string}} order
 */

但我对TypeScript版本感兴趣以便理解。

作为奖励,我希望order类型为Order

1 个答案:

答案 0 :(得分:0)

您可以使用如下所示的d.ts文件来实现此目的:

declare module 'customer' 
{
    export class customer 
    {
        public firstName: string;
        public lastName: string;
        public addOrder(order: any): void;
    }
}

您可以将其放在根目录中的任何文件夹中。让我们说'manual_typings'。

然后在你的index.js:

let Customer = require('./entities/customer');

let c = new Customer();
c.addOrder(123);

在你的tsconfig.js中设置"allowJs" = true

希望这有帮助。