【问题标题】:Typescript : ESLint : Unsafe return of an any typed value @typescript-eslint/no-unsafe-returnTypescript : ESLint : 任何类型值的不安全返回 @typescript-eslint/no-unsafe-return
【发布时间】:2021-01-27 20:14:20
【问题描述】:

我有以下代码块:

const createRecordMapping = () : unknown => mapper.createMap(Record, RecordDto)
  .forMember((d) => d.value,
    mapFrom((s) => GraphQLJSON.parseValue(s.value)));

我得到的 Eslint 错误是:

任何类型值的不安全返回 @typescript-eslint/no-unsafe-return

我在这里错过了什么?

【问题讨论】:

  • d.valueGraphQLJSON.parseValue(s.value) 产生 any。您的 linting 规则禁止返回 any

标签: javascript typescript typescript-typings


【解决方案1】:

你写的代码翻译成这样:

const createRecordMapping = (): unknown => mapper.createMap(Record, RecordDto)
  .forMember((d) => /*d.value, */mapFrom((s) => GraphQLJSON.parseValue(s.value)));

您可能想要链接函数:

const createRecordMapping = (): unknown => mapper.createMap(Record, RecordDto)
  .forMember((d) => d.value)
  .mapFrom((s) => GraphQLJSON.parseValue(s.value) as unknown);

另外,GraphQLJSON.parseValue 可能确实返回 any 类型,因为它正在解析 JSON。

【讨论】:

  • "你写的代码翻译成这个" 不,它传递两个参数给.forMembers - 第一个是(d) => d.value 第二个是(结果)mapFrom((s) => GraphQLJSON.parseValue(s.value))。我不熟悉 API,所以我不知道这是否是调用 .forMembers 的正确方法,或者是否有 mapFrom 函数,但这种情况似乎很合理。如果这是不正确的,我肯定会期待一个非常不同的错误 - 如果没有定义或导入,至少 mapFrom 不会被识别为有效函数。
  • @VLAZ 很抱歉,但事实并非如此,() => ... 转换为 function () { return ... }。当您返回由, 分隔的值时,只会保留最后一个值。第一个只被执行。通常由缩小器使用。
  • 更正,(d) => d.value 函数被丢弃,只保留mapFrom(...)。解析值不返回函数,因此整个事情都崩溃了。
  • This is not true。这个 不是 逗号操作符,它是一个简单的函数调用。如果你想要逗号操作符,你需要将它们包围在() - > fn((a, b))b 传递给fn,而fn(a, b),将a 作为第一个参数传递,b 作为第二个参数传递。
猜你喜欢
  • 2023-02-18
  • 2023-02-26
  • 1970-01-01
  • 2021-08-10
  • 2020-10-01
  • 2021-09-29
  • 2020-12-22
  • 2021-11-19
  • 2021-01-08
相关资源
最近更新 更多