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

TypeScript扩展运算符致对象被拆分为单个字符,如何解决?

解决TypeScript中扩展运算符将对象拆分为单个字符的问题

根本原因

你传入createItem的参数不是FleetAccount类型的对象,而是经过HTML转义的JSON字符串。从输出里的"(HTML转义的双引号)和数字索引键就能看出来——当你对字符串使用对象扩展运算符时,JavaScript会把字符串当作类数组对象处理,每个字符对应一个数字索引的键值对,这就是对象被拆成单个字符的原因。

解决方案

1. 修复接口语法错误

你的FleetAccount接口里businessName和createdAt字段缺少类型定义,先补上:

export default interface FleetAccount {
    id: string;
    businessName: string; // 补充字段类型
    businessAddress: string;
    abn: string;
    primaryContactId: string;
    invoiceIds: Array<string>;
    availableMerchants: Array<string>;
    requireVehicleRegistration: boolean; 
    users: Array<string>;
    createdAt: string; // 补充字段类型
    updatedAt: string;
}

2. 解析传入的JSON字符串

如果调用方只能传入字符串,在方法内部先将其解析为对象,同时处理HTML转义的字符:

async createItem(item: FleetAccount | string): Promise<FleetAccount> {
    // 处理字符串输入,转换为对象
    let parsedItem: FleetAccount;
    if (typeof item === 'string') {
        // 替换HTML转义的双引号为普通双引号
        const cleanedJson = item.replace(/&quot;/g, '"');
        parsedItem = JSON.parse(cleanedJson) as FleetAccount;
    } else {
        parsedItem = item;
    }

    const itemToInsert: FleetAccount = {
        ...parsedItem,
        id: generateUniqueKey("ACC"),
        createdAt: new Date().toISOString(),
        updatedAt: new Date().toISOString(),
    };

    try {
        await this.docClient.send(new PutCommand({
            TableName: this.tableName,
            Item: itemToInsert,
            ConditionExpression: 'attribute_not_exists(id)'
        }));
    } catch (e) {
        if (e instanceof ConditionalCheckFailedException) {
            return Promise.reject("Item with specified Id already exists.");
        } else {
            console.log("FAILURE!");
            console.log(e);
            return Promise.reject();
        }
    }

    return itemToInsert;
}

3. 确保调用方传入对象而非字符串

如果调用方本应传入对象,检查调用代码:比如在HTTP服务中,确保使用了body解析中间件(如Express的express.json()),避免直接传递未解析的请求体字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:00:54