typescript - flatMap 需要結果類型
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 呼叫的回傳類型。
TS 遊樂場
答案#1
我剛自己弄清楚如何正確地消除這個錯誤:
type Model = { converter: (item: ApiItem) => CSVItem | ReadonlyArray<CSVItem> }
flatMap 似乎只有在我的 converter 函數返回 ReadonlyArray 而不是普通數組時,才能推斷出 U。
我其實不太明白為什麼,但我的 TypeScript 水平還是在慢慢提升。
