考虑以下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
。
答案 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
希望这有帮助。