【问题标题】:How to return a null in Typescript? [duplicate]如何在 Typescript 中返回 null? [复制]
【发布时间】:2020-09-14 00:59:07
【问题描述】:

我想知道这段代码是正确的还是有不同的定义方式。

而不是使用错误!,有什么办法。 我想知道什么错误!实际上是无法理解的意思。

【问题讨论】:

标签: javascript typescript


【解决方案1】:

如果您的预期行为是正确的,则您提供的代码是正确的

  1. errors 数组返回第一个错误。
  2. 您确定errors 数组至少包含一个错误,因为您返回的是ErrorResult 而不是ErrorResult | undefined 或其他等价物。

你可以改写成

// Typescripts infers the type of var to be `ErrorResult | undefined`
let error = errors.find(element => element.error);

// ! tells the compiler that you know error is not `undefined`
return error!;  

【讨论】:

    【解决方案2】:
    • 然后在variable 之后标记! 称为bang operatornon-null assertion operator。在你的情况下,我猜你是从你的function 返回ErrorResult。不应该是null
    • 但是你有一些特定的要求,你也想返回null
    • 如果您在variable 之后没有写!,那么您的代码可能会显示compile time error。但是如果你添加! 那么它会compile 没有错误。
    • 但是在这里您需要确保在使用返回值时,您应该将其定义为ErrorResult | undefined,否则它可能会在run time 处引发exception

    这里有一些链接有助于更好地理解这个概念。

    1. In Typescript, what is the ! (exclamation mark / bang) operator when dereferencing a member?
    2. Cleaner TypeScript With the Non-Null Assertion Operator

    class ErrorResult {
      error: boolean
      constructor(error: boolean) {
        this.error = error;
      }
    }
    
    function getError(errors: ErrorResult[]) {
      let error: ErrorResult;
      errors.forEach(element => {
        if (element.error === true) {
          error = element;
        }
      });
      return error!;
    }
    
    let myError: ErrorResult | undefined;
    myError = getError([new ErrorResult(false)]);
    console.log(myError);
    
    let myError2: ErrorResult | undefined;
    myError2 = getError([new ErrorResult(true)]);
    console.log(myError2);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-24
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多