有没有一种方法可以使TypeScript缩小一个基于某个用作缩小提示的布尔变量的联合类型
上面的代码运行良好。但是我想重构它,这样就不会每次都计算有没有一种方法可以使TypeScript缩小一个基于某个用作缩小提示的布尔变量的联合类型,typescript,Typescript,上面的代码运行良好。但是我想重构它,这样就不会每次都计算typeofexpression,因为list数组可能非常大。所以我用布尔变量重写了这段代码,如下所示: type Callback = (item: number) => number; const foo = (list: number[], value: Callback | number) => { return list.map(item => typeof value === 'function'
typeof
expression,因为list
数组可能非常大。所以我用布尔变量重写了这段代码,如下所示:
type Callback = (item: number) => number;
const foo = (list: number[], value: Callback | number) => {
return list.map(item =>
typeof value === 'function'? value(item) : value
);
};
但我得到了一个错误:
此表达式不可调用。并非所有类型的成分
'number | Callback'
是可调用的。
类型“number”
没有呼叫签名<代码>ts(2349)
您可以像这样使用
if
语句
type Callback = (item: number) => number;
const foo = (list: number[], value: Callback | number) => {
const isFn = typeof value === 'function';
return list.map(item =>
isFn? value(item) : value
);
};
打字脚本在某些情况下是愚蠢的。。。 你应该明确地告诉他会是哪种类型
const foo = (list: number[], value: Callback | number) => {
if(typeof value === 'function')
return list.map(item => value(item));
return list.map(item => value);
};
在这种情况下,只需编写
list.map(value)
就更简单了。遗憾的是,您的解决方案不适用于我的实际代码,因为我的代码有点复杂(它有嵌套表达式)。不过,你的答案很好地解决了上述问题。list.map(typeof value===“function”?value:item=>value)
?@kaya3将其作为答案发布如何?它与我投赞成票的公认答案太相似了。
type Callback = (item: number) => number;
const foo = (list: number[], value: Callback | number) => {
const isFn = typeof value === 'function';
return list.map(item =>
isFn? (value as Callback)(item) : value
);
};