' 不可分配给类型 'string',javascript,typescript"/>

首页 > 解决方案 > TypeScript 类型'记录' 不可分配给类型 'string'

问题描述

为什么这是错误的?我也遇到过类似的问题,但从未弄清楚。每当我这样做时:

    type dataType = {
        [key: string]: string | Record<string, string>;
    };

    const rawData = [
        {
            name: 'XXXX',
            commission: 'XXXX',
            psc: 'XXX XX',
            ico: 'XXXXXXXX',
            address: 'XXXXXXX',
            city: 'XXXXXXXXXXX',
        },
    ];
    const createData = ({ name, commission, ico, address, psc, city }: dataType) => {
        return { name, commission, legal: { name, ico, address, city: `${psc} ${city}` } };
    };

    const rows: dataType[] = [createData(rawData[0])];

从理论上讲,这应该可以正常工作,不是吗?dataType 是一种对象类型,其键为字符串,其值为字符串或另一个对象。为什么这不起作用?

标签: javascripttypescript

解决方案


createData不应该把一个dataType对象作为它的论据。你写它的方式nameico并且address可能是 type Record<string, string>,到达签名

const createData: ({ name, commission, ico, address, psc, city }: dataType) => {
    name: string | Record<string, string>;
    commission: string | Record<string, string>;
    legal: {
        name: string | Record<string, string>;
        ico: string | Record<...>;
        address: string | Record<...>;
        city: string;
    };
}

legal当您尝试将结果分配给dataType变量时,对象内的这些记录无效。

相反,使用

const createData = ({ name, commission, ico, address, psc, city }: Record<string, string>) => …

这是适合您的正确类型rawData。(您可能想要更精确并定义具有确切属性的接口)。


推荐阅读