如何修复 属性 'usernam' 在类型 'Socket<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap>' 上不存在

how fix Property 'usernam' does not exist on type 'Socket<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap>'

socket.on('Username', async (data: any) => {
    clients[data] = socket.id
    socket.usernam = data; //error

    const user = await Users.findByIdAndUpdate(data, {
        $set: { isOnline: true },
    })
})

属性 'usernam' 在类型 'Socket<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap>'

上不存在

我想大概是 socket.io。如果是这样,则 socket 变量没有默认定义 属性 usernam。因为我们在这里使用 TypeScript,所以 socket 是类型化的,所以你不能像在 JavaScript 中那样在该对象上定义和使用任意 属性。如果可以,定义“事物类型”的整个目的将丢失。

但由于 TypeScript 是 JavaScript 的超集,您可以将任何对象视为任意 JavaScript 对象。因此,您可以“取消键入”对象 socket,现在它是“经典”JavaScript 变量。所以:

(socket as any).usernam = data; // NO ERROR

但我建议不要使用这种方法。您已经 clients 地图(错误行前一行)所以也许这就足够了?