我有一个来自js-组合学的置换函数,我想配置它
const _BI = typeof BigInt == 'function' ? BigInt : Number;
const _crop = (n) => n <= Number.MAX_SAFE_INTEGER ? Number(n) : _BI(n);
function permutation(n, k) {
if (n < 0)
throw new RangeError(`negative n is not acceptable`);
if (k < 0)
throw new RangeError(`negative k is not acceptable`);
if (0 == k)
return 1;
if (n < k)
return 0;
[n, k] = [_BI(n), _BI(k)];
let p = _BI(1);
while (k--)
p *= n--;
return _crop(p);
}
ts给我的是p *= n--;
Operator '*=' cannot be applied to types 'number | bigint' and 'number'.
我怎样才能纠正错误?
发布于 2021-05-16 01:05:41
这是|
算子和*=
算子的局限性。
*=
运算符不能用混合类型操作。您必须在两边放置相同的类型,或number
或bigint
。n
和p
都添加了一个通用模板n
,您也会遇到麻烦,因为n
可以是bigint
、number
或bigint|number
(某种同时输入)。请参阅https://github.com/microsoft/TypeScript/issues/39569https://stackoverflow.com/questions/67550626
复制相似问题