我通常在不使用typescript的时候做socket.username = username
这样的事情,但是现在我用了,当我试图用同样的方式保存它的时候,它会给我错误
Property 'username' does not exist on type 'Socket'
我知道这意味着我需要延长它,但我已经尝试过这样做
interface Socket {
username: any
}
但是没有用,我也试过这个,
interface SocketIO {
username: any
}
但运气不好。
5条答案
按热度按时间pbpqsu0x1#
只要
socket['username'] = username
就可以了。如果希望类型安全并且希望
username
属性具有自动完成功能,则可以扩展Socket
接口。然后可以将原始的
Socket
强制转换为自定义类型:nfg76nw02#
如果要向套接字对象添加额外信息,可以将此信息添加到**
socket.data
**对象,该对象在其声明文件中使用any
声明以下是
socket.d.ts
文件的片段erhoui1w3#
更一般的方式
只需像这样更新模块声明:
现在您可以使用w/o任意类型转换:
uqzxnwby4#
这似乎接受
socket.username="John"
:但是一个更好的解决方案(恕我直言)是将套接字接口扩展到您自己的套接字:
然后将套接字本身声明为
socket:ExtSocket;
或使用一个难看的类型转换:(socket as ExtSocket).username = "John";
k2arahey5#
您可以向**
socket.data
添加属性,并将首选的data
**类型传递给Socket
: