在我的带有express的node / typescript项目中,我想使用thingspeakclient
包。该软件包没有任何现有的类型定义文件,所以我决定写一个(我第一次)。
我有什么:
src/@types/thingspeakclient
使用以下内容创建文件index.d.ts
:
declare module "thingspeakclient"; declare interface TSCKeys { writeKey: string; readKey: string; } declare class ThingSpeakClient { constructor(opts: any); attachChannel(channelId: number, keys: TSCKeys, callback: Function): void; }
现在,在任何带有例如import * as TSC from "thingspeakclient";
的TS文件中,我想使用这样的东西:
var a = new TSC.ThingSpeakClient();
但是在运行时我看到了这个错误:
的 TypeError: TSC.ThingSpeakClient is not a constructor
现在,我想使用这个1功能,是的,这个软件包非常简单 - 所以我没有问题重新写入TS,但我想学习如何编写有效的类型定义......
有没有人可以告诉我我做错了什么?
更新1: 我做了一个由cevek建议的改变,但它仍然没有工作:
用法:
import {ThingSpeakClient} from "thingspeakclient"; var a = new ThingSpeakClient({});
转换为此Javascript:
var thingspeakclient_1 = require("thingspeakclient"); var a = new thingspeakclient_1.ThingSpeakClient({});
但问题是,当这个JS包直接在JS中使用时,它必须像那样使用(注意 - 没有'命名空间'):
var tsc = require("thingspeakclient"); var a = new tsc({});< p>
你可以看到,require中返回的对象直接用作类......
只是为了清晰 - thingspeakclient 包的原始简化 JS代码:
var ThingSpeakClient = function(opts) { //constructor }; ThingSpeakClient.prototype.attachChannel = function(channelId, keys, callback) { } // next function definitions... // next ... // and at the end of file: module.exports = ThingSpeakClient;
全班在这里: https://github.com/imwebgefunden/thingspeakclient_node/blob/master/thingspeakclient.js
答案 0 :(得分:0)
只需将your module放入您的类和接口
即可declare module 'thingspeakclient' {
export interface TSCKeys {
writeKey: string;
readKey: string;
}
export default class ThingSpeakClient {
constructor(opts: any);
attachChannel(channelId: number, keys: TSCKeys, callback: Function): void;
}
}
import ThingSpeakClient from "thingspeakclient";
var a = new ThingSpeakClient();
答案 1 :(得分:0)
另一种方法,如果你真的想要使用commonjs module pattern
declare namespace TSC {
export interface TSCKeys {
writeKey: string;
readKey: string;
}
export class ThingSpeakClient {
constructor(opts: any);
attachChannel(channelId: number, keys: TSCKeys, callback: Function): void;
}
}
declare module 'thingspeakclient' {
import ThingSpeakClient = TSC.ThingSpeakClient;
export = ThingSpeakClient;
}
import * as ThingSpeakClient from "thingspeakclient";
var a = new ThingSpeakClient(1);