You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord机器人开发遇TypeScript Property assignment expected错误

问题背景

开发Discord机器人审计日志模块时,需要为机器人接入的所有服务器自动生成审计配置条目,调用discord-auditlog包能力传入配置时,使用内嵌${guild.id}的模板字符串作为配置对象的键,TypeScript抛出Property assignment expected语法错误,代码无法正常编译运行。

复现代码
client.guilds.cache.forEach(async (guild: any) => {
    guildPrefs = await guildModel.findOne({ GuildID: guild.id }).catch(err => console.log(err));
    let guildId: string = '';

    guildId = `${guild.id}`

    await audit(client, {
        `${guild.id}`: {
            auditlog: guildPrefs.AuditChannel,
            auditmsg: guildPrefs.AuditChannel,
            voice: guildPrefs.AuditChannel,
            trackroles: true
        }
    });
})
报错原因

JS/TS对象字面量的键如果是固定字符串,可以直接写key: value形式;但如果键是动态生成的值(变量、模板字符串插值结果、表达式返回值),必须使用计算属性名语法,也就是给动态键外层包裹方括号[]。
直接在键位写${guild.id}模板字符串时,解析器会判定为非法的静态属性名写法,因此抛出属性赋值预期的语法错误。

修复方案

给作为动态键的模板字符串外层包裹方括号即可,由于guild.id本身就是字符串类型,无需额外套模板字符串,直接传入变量即可。修复后的核心代码段如下:

client.guilds.cache.forEach(async (guild: any) => {
    const guildPrefs = await guildModel.findOne({ GuildID: guild.id }).catch(err => console.log(err));
    // 新增空值判断,避免查无配置时访问属性抛出空指针错误
    if (!guildPrefs) return;

    await audit(client, {
        // 动态键必须用[]包裹,标记为计算属性
        [guild.id]: {
            auditlog: guildPrefs.AuditChannel,
            auditmsg: guildPrefs.AuditChannel,
            voice: guildPrefs.AuditChannel,
            trackroles: true
        }
    });
})

注:原代码中声明后赋值的guildId变量未被实际使用,属于冗余代码,可直接删除。


内容的提问来源于stack exchange,提问作者nikoszz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 15:27:23