我有一个要转换为对象数组的 TSV 文件,这是我的代码:
const handleFileConversion = (
data: string, // the TSV file as text
delimiter: string // "\t", a tab
): ParameterType[] => {
const headers = data.slice(0, data.indexOf('\n')).split(delimiter);
const rows = data.slice(data.indexOf('\n') + 1).split('\n');
const headings = headers.map((header) => header.replace('\r', ''));
const arr = rows.map((row) => {
const values = row.split(delimiter);
const parameter: ReducerObject = headings.reduce(reducerFunction(values), {});
return parameter;
});
return arr;
};
const reducerFunction =
(values: string[]) =>
(object: object, header: string, index: number) => {
if (header === 'factor') {
const factors = values[index].split(';').map((num) => Number(num));
object[header] = factors;
} else {
object[header] = values[index].replace('\r', '');
}
return object;
};
type ReducerObject = {
[key: string]: string | number[] | number;
};
type FlatRateOrPricePerPageType = {
flatRate: number
pricePerPage: ""
} | {
flatRate: ""
pricePerPage: number
};
export type ParameterType = {
name: string,
label: string,
factor: [number, number, number, number],
type: "checkbox" | "range" | "textField",
} & FlatRateOrPricePerPageType;
Type 'ReducerObject[]' is not assignable to type 'ParameterType[]'.
Type 'ReducerObject' is not assignable to type 'ParameterType'.
Type 'ReducerObject' is not assignable to type '{ name: string; label: string; factor: [number, number, number, number]; type: "checkbox" | "range" | "textField"; } & { flatRate: ""; pricePerPage: number; }'.
Type 'ReducerObject' is missing the following properties from type '{ name: string; label: string; factor: [number, number, number, number]; type: "checkbox" | "range" | "textField"; }': name, label, factor, type TS2322
50 | });
51 |
> 52 | return arr;
| ^
53 | };
54 |
55 | const reducerFunction =
我知道它告诉我 RecuderObject
缺少四个键,但我将它们添加到函数中。如果我像这样使用 ParamaterType
而不是 ReducerObject
:
const parameter: ParameterType = headings.reduce(reducerFunction(values), {});
我收到以下错误:
Type '{}' is not assignable to type 'ParameterType'.
Type '{}' is not assignable to type '{ name: string; label: string; factor: [number, number, number, number]; type: "checkbox" | "range" | "textField"; } & { flatRate: ""; pricePerPage: number; }'.
Type '{}' is missing the following properties from type '{ name: string; label: string; factor: [number, number, number, number]; type: "checkbox" | "range" | "textField"; }': name, label, factor, type TS2322
46 | const arr = rows.map((row) => {
47 | const values = row.split(delimiter);
> 48 | const parameter: ParameterType = headings.reduce(reducerFunction(values), {});
| ^
49 | return parameter;
50 | });
51 |
并将其添加为 .reduce()
的第二个参数也不能解决此问题:
{
name: '',
label: '',
factor: [0, 0, 0, 0],
type: '',
}