Typescript declarations file for Node C++ Addon

蓝咒 提交于 2019-12-23 09:30:04

问题


I have a Node C++ Addon that provides a wrapped class similar to the one in the Node documentation. I can require() my addon and then get the constructor for my class to create an instance.

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

Now I want to use TypeScript to do the same. I can't find the right combination of .d.ts file and import statement to make this work. I guess ideally I'd like to declare my class is in the module and has a constructor that takes a string. I could then just do:

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

Any examples of this that people have seen?


回答1:


I think I finally have it. As suggested by @ZachB, I created a myaddon.ts file that has the following:

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

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

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

Then use it:

import { MyClass } from 'myaddon'

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



回答2:


There are perhaps better ways of doing this, but I use the following pattern:

// 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;

And then use it from other parts of my module with import bindings from "../bindings".



来源:https://stackoverflow.com/questions/44275172/typescript-declarations-file-for-node-c-addon

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!