【发布时间】:2020-09-14 00:59:07
【问题描述】:
我想知道这段代码是正确的还是有不同的定义方式。
而不是使用错误!,有什么办法。 我想知道什么错误!实际上是无法理解的意思。
【问题讨论】:
-
...当问题是关于那段代码时,你为什么只编辑掉唯一的一段代码?
标签: javascript typescript
我想知道这段代码是正确的还是有不同的定义方式。
而不是使用错误!,有什么办法。 我想知道什么错误!实际上是无法理解的意思。
【问题讨论】:
标签: javascript typescript
如果您的预期行为是正确的,则您提供的代码是正确的
errors 数组返回第一个错误。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!;
【讨论】:
variable 之后标记! 称为bang operator 或non-null assertion operator。在你的情况下,我猜你是从你的function 返回ErrorResult。不应该是null。null。 variable 之后没有写!,那么您的代码可能会显示compile time error。但是如果你添加! 那么它会compile 没有错误。ErrorResult | undefined,否则它可能会在run time 处引发exception。这里有一些链接有助于更好地理解这个概念。
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);
【讨论】: