Javascript 在某个对象属性之前是什么意思?为什么我的ts文件没有´;你不接受吗?

Javascript 在某个对象属性之前是什么意思?为什么我的ts文件没有´;你不接受吗?,javascript,html,angular,typescript,conditional-statements,Javascript,Html,Angular,Typescript,Conditional Statements,当我有一个对象可能未定义或不是所需对象时,我总是使用angular*ngIf指令中显示的这种行为 <div *ngIf="object?.foo"> ... </div> 我将Angular 7.3.9用于此项目它在模板中工作的原因是Angular将对其求值为以下表达式: <div *ngIf="object && object.foo"> 如本答案注释中所述,TypeScript将在3.7版本中添加对角度模板语法的支持:TypeScr

当我有一个对象可能未定义或不是所需对象时,我总是使用angular
*ngIf
指令中显示的这种行为

<div *ngIf="object?.foo">
  ...
</div>

我将Angular 7.3.9用于此项目

它在模板中工作的原因是Angular将对其求值为以下表达式:

<div *ngIf="object && object.foo">

如本答案注释中所述,TypeScript将在3.7版本中添加对角度模板语法的支持:

TypeScript 3.7+具有可选链接()

因此,表达式
if(object?.foo){}
是有效语法-如果
object
未定义或为null,则条件将解析为未定义


检查您的typescript版本。

在angular html文件中是否有关于此行为的文档?是的,我在回答中添加了链接:)您也可以使用!避免错误。当您知道它不会在HTML的这一部分未定义时,这就更有用了。对于exmaple,您可以使用*ngIf=“object!.foo”这是一个很好的答案,非常有用,谢谢@AntoineB,这不是
唯一的用法,您还可以使用它来定义接口的一些可选属性。我写了一个答案来提到这一点
<div *ngIf="object && object.foo">
function myFunc(mandatoryParam: any, optionalParam?: any) {
    ...
}

myFunc('hello'); // Will work
myFunc('hello', 'world'); // Will work too