2017-05-31 2 views
2

J'ai un addon C++ de noeud qui fournit une classe enveloppée similaire à celle de la documentation du noeud. Je peux require() mon addon et ensuite obtenir le constructeur pour ma classe pour créer une instance.Fichier de déclarations tapuscrit pour l'addon C++ du noeud

const { MyClass } = require('myaddon'); 
const obj = new MyClass('data'); 

Maintenant je veux utiliser TypeScript pour faire la même chose. Je ne peux pas trouver la bonne combinaison de fichier .d.ts et l'instruction d'importation pour faire ce travail. Je suppose que dans l'idéal je voudrais déclarer que ma classe est dans le module et a un constructeur qui prend une chaîne. Je pourrais alors juste faire:

import { MyClass } from 'myaddon'; 
const obj = new MyClass('data'); 

Des exemples de ce que les gens ont vu?

Répondre

3

Je pense que je l'ai enfin. Comme l'a suggéré @ZachB, j'ai créé un fichier myaddon.ts qui a les éléments suivants:

const myaddon = require('./build/release/myaddon') 

export interface MyClass { 
    myMethod(arg: string): number 
} 

export var MyClass: { 
    new(param: string): MyClass 
} = myaddon.MyClass 

ensuite l'utiliser:

import { MyClass } from 'myaddon' 

const thing: MyClass = new MyClass('something') 
const answer: number = thing.myMethod('blah') 
-1

Il y a peut-être de meilleures façons de le faire, mais j'utiliser le schéma suivant:

// bindings.ts 
// Declare the interface of your addon: 
export interface MyBindings { 
    myMethod1: (arg1: number) => null; 
} 
// Load it with require 
var myClass: MyBindings = require("./build/release/myaddon"); 
export default myClass; 

Et puis l'utiliser dans d'autres parties de mon module avec import bindings from "../bindings".

+0

(? Pourquoi le downvote soin d'expliquer) – ZachB