如何修复 属性 '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
地图(错误行前一行)所以也许这就足够了?
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
地图(错误行前一行)所以也许这就足够了?