typescript flatMap需要结果类型

izkcnapc  于 2023-03-04  发布在  TypeScript
关注(0)|答案(1)|浏览(165)
type ApiItem = Record<string, unknown>;
type CSVItem = Record<string, unknown>;
type Model = { converter: (item: ApiItem) => CSVItem | CSVItem[] };

function convertItems(model: Model, { main }: { main: ApiItem[] }): CSVItem[] {
    const { converter } = model;

    return main.flatMap((item) => converter(item));
}

flatMap指令引发错误:

Type 'unknown[]' is not assignable to type 'CSVItem[]'.
  Type 'unknown' is not assignable to type 'CSVItem'.

如果我将最后一行改为:

return main.flatMap<CSVItem>((item) => converter(item));

我不明白,因为我给予flatMap的回调是已知的,它返回一个CSVItem或CSVItem数组,推理应该起作用,我不应该指定flatMap调用的返回类型。
TSPlayground

jgovgodb

jgovgodb1#

我刚刚想到如何正确地避开这个错误:

type Model = { converter: (item: ApiItem) => CSVItem | ReadonlyArray<CSVItem> }

flatMap似乎只有在converter函数返回ReadonlyArray而不是通常的数组时才能推断U。
虽然我不太明白为什么,但我的打字水平仍然在缓慢上升。

相关问题