【问题标题】:Typescript if conditional before returning a new object打字稿如果在返回新对象之前有条件
【发布时间】:2025-12-22 12:55:12
【问题描述】:

我编写了一段代码,它将数据集的值映射到一个新对象。

我想在将数据集中的一个变量分配给新的对象变量之前对其进行检查。为此,我将使用 if 条件。如何使用 Typescript 中的地图来实现这一点。如果我尝试编译,以下代码将返回错误。

如果我尝试在 console.log 行执行 if 条件,它只会影响数据集中的第一项。

return this.UserService.search(url)
.map((data) => {
    console.log(data);
    data.result = <any> data.result.map((user, index) => ({
        // if statement causing error here
        if(user.name === null || user.name === undefined){
            // error with this if condition
        },
        id: user.id,
        name: user.name,
        type: user.type,
        password: user.password,
    }));
    return data;
}).map(data => ({
    meta: { totalItems: data.size },
    data: data.result,
}));

【问题讨论】:

  • 基本 javascript 语法,您正在返回一个对象,您不能在这样的对象中包含 if 语句 - 我的意思是,属性名称是什么?
  • 是的,我不能在地图中使用 if。但是,在映射之前,我想检查 user.name 的 null 值,如果为 null,则添加一个占位符名称。类似于 user.name = 'jaromanda'

标签: javascript typescript dictionary if-statement


【解决方案1】:

基本语法问题。更改您的地图代码如下

data.result = <any> data.result.map((user, index) => {
  if (user.name === null || user.name === undefined) {

  }
  return {
    id: user.id,
    name: user.name,
    type: user.type,
    password: user.password,
  }
});

或者,使用三元运算符

data.result = <any> data.result.map((user, index) => ({
    id: user.id,
    name: (user.name === null || user.name === undefined) ? "???" : user.name,
    type: user.type,
    password: user.password,
}));

不知道我把"???" 放在哪里 - 因为你还没有展示当条件为真时该怎么做

【讨论】:

  • 我的猜测是没有错误,可能是一些看起来像错误的 tslint 警告。或者usernullundefined 而不是它上面的属性
  • 抱歉,我无意中在第一段代码的=&gt; 中添加了一个空格 - 我的小错字应该被显示的不同错误发现 - 第二段代码应该可以正常工作,如果没有,那么 typescript 实际上是 sux
  • 三元运算符完美运行。我是函数式编程和三元运算符的新手。感谢您扩展我的知识并为这个问题提供解决方案,非常感谢。
  • 空间没有问题。我相信这是因为我的返回类型应该是可观察的并注意纯对象