如何使用Node.js包中的TypeScript键入信息



我读过很多关于同一个问题的不同变体,但我就是无法理解它。我正在使用websocket模块(我以前在没有TypeScript的情况下使用过很多次(,但我不知道如何键入变量?

我有一个接受WebSocketConnection对象的函数,但当我给它类型WebSocketConnection时,我会从TypeScript中得到"Cannot find name 'WebSocketConnection'"

我已经安装了@types/websocket软件包,我可以看到index.d.ts文件,其中所有的类型定义都位于相对于我的tsconfig.json文件的./node_modules/@types/websocket/index.d.ts中。。。

我已经尝试将"typeRoots"选项添加到tsconfig.json文件以及"types"。我尝试过很多价值观的组合,但据我所知,完全放弃它们是更好的选择,所以我也尝试过。我还尝试了来自.d.ts文件和包本身的importing数据的许多变体,当然没有成功。

我尝试使用/// <reference path="node_modules/@types/websocket/index.d.ts" />也没有成功。

我查看了.d.ts文件,发现了一个名为IStringified的接口的非常清晰的声明,如下所示:

export interface IStringified {
toString: (...args: any[]) => string;
}

所以我尝试访问IStringified,但仍然得到相同的"Cannot find name 'IStringified'"错误。

我可能只是真的很笨,错过了一些显而易见的东西,但任何建议或建议都将不胜感激!我到底做错了什么?

已安装软件包的类型在全局范围内不可用。必须将它们导入到每个文件中才能使用它们。根本不要乱用typeroots或三斜杠指令,这只会让事情变得更糟。

在这种特殊情况下,模块导出一个connection类,这可能正是您想要的。不幸的是,这个名称意味着让它看起来像真正的类构造函数——你可能应该在导入时重命名:

import {
server as WebSocketServer,
connection as WebSocketConnection,
} from 'websocket'

现在你可以做:

const wsServer = new WebSocketServer({ httpServer: server });
wsServer.on('request', function(request) {
var connection = request.accept('echo-protocol', request.origin);
doSomethingWithWsConnection(connection) // works
});
function doSomethingWithWsConnection(connection: WebSocketConnection) {
//...
}

TS操场上的Typesafe示例


所以我试图访问IStringified,但我仍然得到相同的";找不到名称"IStringified"错误

导入类型,然后使用类型:

import { IStringified } from 'websocket'
const foo: IStringified = { toString: () => 'asdf' }

游乐场

最新更新