Angular 类型';{}';不可分配给类型';对象[]和#x27;在typescript中映射和缩减期间
我有一个数组中的文件名列表。我的目标是读取数组中的所有文件,并将它们从字符串转换为json。Angular 类型';{}';不可分配给类型';对象[]和#x27;在typescript中映射和缩减期间,angular,typescript,Angular,Typescript,我有一个数组中的文件名列表。我的目标是读取数组中的所有文件,并将它们从字符串转换为json。 这是readAFile()API的签名 现在,我有一个数组,其中包含要读取的所有文件的绝对路径files=['/path/to/file1','/path/to/file2','/path/to/file3'] 我有另一个函数,它将此列表中的每个文件名映射到readAFile(),然后读取它们并将它们转换为JSON,如下所示: readAllFiles(files: string[]): object[
这是readAFile()API的签名 现在,我有一个数组,其中包含要读取的所有文件的绝对路径
files=['/path/to/file1','/path/to/file2','/path/to/file3']
我有另一个函数,它将此列表中的每个文件名映射到
readAFile()
,然后读取它们并将它们转换为JSON,如下所示:
readAllFiles(files: string[]): object[] {
**return** files.map((aFile) => {
return readAFile(aFile); // this api's return type is 'any'
})
.reduce((listOfJson, dataOfOneFile) => {
const jsonData = JSON.parse(dataOfOneFile);
listOfJson.push(jsonData);
return listOfJson;
}, []);
}
我还想包括文件名,下面是我添加的内容
files.map((aFile) => {
const mappedData = {}; // Added this
mappedData['data'] = readAFile(aFile); // the data now goes into this object
mappedData['inputFile'] = aFile;
return mappedData; <------ ERROR: Type '{}' is not assignable to type 'object[]'.
})
files.map((aFile)=>{
const mappedData={};//添加了这个
mappedData['data']=readAFile(aFile);//数据现在进入这个对象
mappedData['inputFile']=a文件;
return mappedData;您的readAllFiles
中的return
表达式非常复杂,很难看出错误来自何处。让我们将其拆分为中间部分:这里的格式适合在中查看和编译(我必须提供虚假的fs
声明,因为那里没有可用的节点类型,还必须修复readAFile
的编码
参数):
及
但是,当您没有真正将列表缩减为单个值时,为什么要使用reduce呢?如果您需要从列表中生成另一个列表,单个映射就可以了:
function readAllFiles(files: string[]) {
return files.map((aFile) => {
return {
data: JSON.parse(readAFile(aFile, 'utf8')),
inputFile: aFile
}
});
}
该类型被推断为
function readAllFiles(files: string[]): { data: any; inputFile: string; }[]
readAllFiles
缺少一个return
@cartant:很抱歉输入错误。我的代码已返回。我已对我的帖子进行了更改。我仍然收到相同的错误。您应该利用类型推断并使用files.map(f=>({data:readAFile(f),inputFile:f))
正如@artem所暗示的那样,readAllFiles
的返回类型在推断时是优越的。感谢您的帮助!在分解它之后,我单独操作了它,现在它可以工作了!使用了reduce()的第一个变体
reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray<T>) => T,
initialValue?: T): T;
reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray<T>) => U,
initialValue: U): U;
const rf = mf.reduce<object[]>((listOfJson, dataOfOneFile) => {
function readAllFiles(files: string[]) {
return files.map((aFile) => {
return {
data: JSON.parse(readAFile(aFile, 'utf8')),
inputFile: aFile
}
});
}
function readAllFiles(files: string[]): { data: any; inputFile: string; }[]