[英]Cartesian product works well in JavaScript but not in TypeScript
如果有這個簡短的實用程序代碼用於生成任意數量的 arrays 的笛卡爾積:
const f = (a, b) => [].concat(...a.map(d => b.map(e => [].concat(d, e))));
const cartesian = (a, b, ...c) => (b ? cartesian(f(a, b), ...c) : a);
例如:
console.log(cartesian([1, 2, 3], [4, 5]));
給出:
[ [ 1, 4 ], [ 1, 5 ], [ 2, 4 ], [ 2, 5 ], [ 3, 4 ], [ 3, 5 ] ]
但是,當我嘗試將其從 JavaScript 移植到 TypeScript 時,出現以下錯誤:
error TS2557: Expected at least 2 arguments, but got 1 or more.
const cartesian = (a, b, ...c) => (b ? cartesian(f(a, b), ...c) : a);
~~~~
const cartesian = (a, b, ...c) => (b ? cartesian(f(a, b), ...c) : a);
~
An argument for 'b' was not provided.
我發現這個答案表明傳播運算符僅在所有參數都標記為可選時才起作用。
但我不確定如何在我的代碼中應用它( ...c?
似乎不起作用),老實說 - 我什至不確定這是正確的解決方案。
我該如何解決這個問題?
已解決 - 問號應應用於第二個參數:
const cartesian = (a, b?, ...c) => (b ? cartesian(f(a, b), ...c) : a);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.