我读过很多关于同一个问题的不同变体,但我就是无法理解它。我正在使用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
文件和包本身的import
ing数据的许多变体,当然没有成功。
我尝试使用/// <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' }
游乐场