javascript - 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 是一种对象类型,其键为字符串,其值为字符串或另一个对象。为什么这不起作用?
解决方案
你createData
不应该把一个dataType
对象作为它的论据。你写它的方式name
,ico
并且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
。(您可能想要更精确并定义具有确切属性的接口)。
推荐阅读
- ruby - 无效的参数“路径”=>“/”(HTTParty Ruby)
- python - 从 2 个不同的列表中删除相似的项目
- google-cloud-firestore - Firebase/Firestore 事务是否创建内部队列?
- sql - 带除法的sqlite嵌套查询
- r - R中的标签文本重叠
- c# - 如果不在 html 注释行中,则正则表达式匹配 URL
- ios - 从主机控制器重新加载 SwiftUI 视图
- sql - 如何在 SQL Server 中将八个十六进制字节(16 位)转换为十进制值?
- python - ModuleNotFoundError- 请求(尽管安装尝试显示“要求已满足”)
- android - 如何唯一命名录制的文件?