Typescript 如何重新声明socket.io客户端API类型以实现额外的类型安全性
我正在试验socket.io和TypeScript。我试图实现的是在客户端为Typescript 如何重新声明socket.io客户端API类型以实现额外的类型安全性,typescript,socket.io,es6-modules,Typescript,Socket.io,Es6 Modules,我正在试验socket.io和TypeScript。我试图实现的是在客户端为socket.on函数及其回调提供一些额外的类型安全性 例如,在我的服务器代码中,我发出以下消息: socket.emit('timer', new Date()) 现在在我的客户机代码中: socket.on('timer', callback); 我希望编译器理解回调函数只接受一个Date类型的参数 为此,我发现我可以使用一些重载重新声明socket.io客户机类型声明。因此,我在我的自定义套接字io.d.ts文
socket.on
函数及其回调提供一些额外的类型安全性
例如,在我的服务器代码中,我发出以下消息:
socket.emit('timer', new Date())
现在在我的客户机代码中:
socket.on('timer', callback);
我希望编译器理解回调函数只接受一个Date类型的参数
为此,我发现我可以使用一些重载重新声明socket.io客户机
类型声明。因此,我在我的自定义套接字io.d.ts
文件中尝试了以下操作:
import 'socket.io-client';
declare module 'socket.io-client' {
declare namespace SocketIOClient {
interface Emitter {
on(event: 'timer', fn: (timestamp: Date) => void): Socket;
}
}
}
但它不起作用
如果我将其声明为全局而非模块,则一切正常:
import 'socket.io-client';
declare global {
namespace SocketIOClient {
interface Emitter {
on(event: 'timer', fn: (timestamp: Date) => void): Socket;
}
}
}
但这似乎很老套。如何通过模块声明实现这一点