2016-04-16 2 views
0

die folgende Node.js Projektstruktur Betrachtet:erstellen Typoskript Schnittstelle für bestehende Node.js Modul für VS-Code IntelliSense

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

Wenn ein entities/customer.js wie folgt mit:

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

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

module.exports = Customer 

In ./index.js, entities/customer.js wird verwendet:

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

Wie würde ich nur erklären ein TypeScript interface zur Unterstützung von VS Code IntelliSense, um nicht nur addOrder(param: any): void anzuzeigen und wo würde ich alles an seinen Platz setzen? Ich möchte keine TypScript-Implementierung haben, die das aktuelle Modul Customer ersetzt.

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

Aber ich bin interessiert an der Typoskript Version für das Verständnis:

Natürlich könnte ich JSDoc Kommentare (dank Salsa Sprachendienst in VS-Code) verwenden. Als Bonus möchte ich order vom Typ Order sein.

Antwort

0

Sie können dies erreichen mit der d.ts-Datei, die wie folgt aussieht: können

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

Sie es in Ihrer Wurzel einer in jedem Ordner. Sagen wir "manual_typings".

Dann in Ihrem index.js:

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

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

Und in Ihrem tsconfig.js gesetzt "allowJs" = true

Hoffnung, das hilft.

+1

Danke, aber das erklärt eine Implementierung, die ich nicht will. Und die Reihenfolge ist immer noch von Typ any. –

Verwandte Themen