Почему это неправильно? У меня были похожие проблемы с этим, и я никогда не понимал этого. Когда бы я ни делал это:
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 - это тип объекта с любым ключом, который является строкой со значением строки или другого объекта. Почему это не работает?
2 ответа
Ваш createData
не должен принимать объект dataType
в качестве аргумента. Как вы это написали, name
, ico
и address
могут иметь тип 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
. (Вы можете быть более точными и определить интерфейс с точными свойствами).
введите описание изображения здесь
Имя причины может быть строкой | Запишите
Ваш {{x0}} не должен принимать объект {{x1}} в качестве аргумента. Как вы написали его, {{x2}}, {{x3}} и {{x4}} и {{x4}} могут быть
Лично я не рекомендую вам так писать.
type DataType = {
name: string,
commission: string,
psc: string,
ico: string,
address: string,
city: string,
};
type AnotherDataType = {
name: string,
commission: string,
legal: Partial<DataType>
}
Может быть лучше.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.