首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Walrus算子TypeScript等价if语句

Walrus算子TypeScript等价if语句
EN

Stack Overflow用户
提问于 2022-11-24 10:28:33
回答 1查看 31关注 0票数 0

这个问题非常相似,但w.r.tto if语句:

代码语言:javascript
复制
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语句中定义海象-like操作符吗?

代码语言:javascript
复制
% npx tsc --target es2022 --moduleResolution node example.ts
example.ts:9:9 - error TS1005: ')' expected.

9 if (let v = foo(process.argv[2]))
          ~
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-24 10:42:07

不,用if是不可能的。如果你想缩小v的范围,你可以做的最好的事情就是创建一个新的块

代码语言:javascript
复制
...
{ 
  let v= ...; 
  if (v) {
    ...
  }
  console.log(v); // no error here
} 
console.log(v) // compile error here
...

当然,您可以滥用for循环,方法是在第一次迭代时从它中删除break,或者将v设置为falsey。类似于您对i所做的操作,但不需要额外的变量。

代码语言:javascript
复制
for (let v = ...; !!v;) {
  console.log(v);
  break;
}

代码语言:javascript
复制
for (let v = ...; !!v; v=undefined) {  //or whatever falsey fits the type of your v
  console.log(v);
}

但IMHO的这两种变体都很难看,而且不太直观。(第二个似乎稍微好一些),如果有人意外地移除了break,您最终会陷入一个没完没了的循环。

我想再加一个街区..。

在您的示例中,v实际上是一个boolean,您根本不需要这个变量。你可以就这么做

代码语言:javascript
复制
if (foo(...)) {
  console.log(true);
}

但我怀疑你所有的用法都会有boolean.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74559227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档