Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 类型';{}';不可分配给类型';对象[]和#x27;在typescript中映射和缩减期间_Angular_Typescript - Fatal编程技术网

Angular 类型';{}';不可分配给类型';对象[]和#x27;在typescript中映射和缩减期间

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[

我有一个数组中的文件名列表。我的目标是读取数组中的所有文件,并将它们从字符串转换为json。
这是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; }[]