与this question极其相似,但w.r.t改为if语句:
import { argv } from "process"
function foo(input: string): boolean
{
return input === "ppp";
}
for (let i=0, v; v = foo(process.argv[2]) && i < 1; i++)
//if (let v = foo(process.argv[2]))
{
console.log(v);
}
// console.log(v); <--- compile-time error, good !
有没有办法在if语句中定义一个类似Walrus的运算符?
% npx tsc --target es2022 --moduleResolution node example.ts
example.ts:9:9 - error TS1005: ')' expected.
9 if (let v = foo(process.argv[2]))
~
1条答案
按热度按时间z5btuh9x1#
不,这在
if
中是不可能的。当然,你也可以滥用
for
循环,比如在第一次迭代时,break
就退出,或者把v
设为falsey,类似于i
,但不需要额外的变量。或
但恕我直言,这两个变体都相当丑陋,也不是很直观。(第二个似乎稍微好一点)而且如果有人不小心删除了
break
,你最终会陷入无尽的循环。我会用额外的块...
在你所展示的例子中,
v
实际上是一个boolean
,你根本不需要这个变量。但我怀疑您是否会在所有用例中都使用
boolean
...