当我有一个对象可能未定义或不是所需的对象时,我总是在角度*ngIf
指令中使用这种行为
<div *ngIf="object?.foo">
...
</div>
我知道这是有效的,但不知道为什么。。。
但是,当我试图在TypeScript
文件中的if上使用它时,就像下面的angular一样,在我尝试使用这种行为的每一行上,都会抛出两个不同的错误TS1005, TS1109
,一个交替。
if(object?.foo){} // error TS1109
if(object?.foo){} // error TS1005
if(object?.foo){} // error TS1109
if(object?.foo){} // error TS1005
我在这个项目中使用Angular 7.3.9
它在模板中工作的原因是angular将根据以下表达式对其求值:
<div *ngIf="object && object.foo">
这将防止在对象为null时调用对象属性的错误。
文档链接:https://angular.io/guide/template-syntax#the-安全导航操作员----和空属性路径
它在组件的typescript部分不起作用,因为typescript不支持它。
对于typescript中的变量,?
的唯一用途是指定方法的参数是可选的:
function myFunc(mandatoryParam: any, optionalParam?: any) {
...
}
myFunc('hello'); // Will work
myFunc('hello', 'world'); // Will work too
如本答案的评论中所述,TypeScript将在3.7版本中添加对角度模板语法的支持:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#optional-链式
Typescript 3.7+具有可选链接(https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#optional-链式(
因此,表达式if (object?.foo) {}
是有效语法-如果object
未定义或为null,则条件将解析为未定义。
检查你的打字版本。