Node C ++ Addon的Typescript声明文件

时间:2017-05-31 03:34:12

标签: typescript node.js-addon

我有一个Node C ++ Addon,它提供了一个类似于Node文档中的包装类。我可以要求()我的插件然后获取我的类的构造函数来创建一个实例。

steps(aNum)

现在我想使用TypeScript来做同样的事情。我无法找到.d.ts文件和import语句的正确组合来使其工作。我想理想情况下我想声明我的类在模块中并且有一个带字符串的构造函数。我可以这样做:

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

人们见过这个例子吗?

3 个答案:

答案 0 :(得分:5)

我想我终于有了它。正如@ZachB所建议的,我创建了一个myaddon.ts文件,其中包含以下内容:

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

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

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

然后使用它:

import { MyClass } from 'myaddon'

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

答案 1 :(得分:3)

可能有更好的方法,但我使用以下模式:

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

然后使用import bindings from "../bindings"从模块的其他部分使用它。

答案 2 :(得分:0)

如果你需要做一个环境声明,(因为我使用的是 Node-Gyp + Webpack),你可以添加一个 mymodule.d.ts:

declare module "*mymodule.node" {
    declare class SpaceItem {}

    declare class Item extends SpaceItem {
        GetItemName(): number;
        CreateMesh(StepData, FormNote, RegDuplicate?);
    }

    var Enabler: {
        EnableMathModules(string, string);
    };
}

然后需要这个

import mymodule from '../build/Release/mymodule.node';