首页 > 解决方案 > 在某些对象属性之前,“?”是什么意思?为什么我的 ts 文件不接受它?

问题描述

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

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

我知道这行得通,但不知道为什么......

但是,当我尝试在我的文件中的 if 上使用它时,比如在我尝试使用这种行为的每一行上,我会TypeScript抛出两个不同的错误,交替出现。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

标签: javascripthtmlangulartypescriptconditional-statements

解决方案


它在您的模板中起作用的原因是 angular 会将其评估为以下表达式:

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

如果对象为空,这将防止在对象上调用属性的错误。

文档链接:https ://angular.io/guide/template-syntax#the-safe-navigation-operator----and-null-property-paths

它不适用于组件的打字稿部分,因为打字稿不支持它。

打字稿中 for 变量的唯一用途?是指定方法的参数是可选的:

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#可选链


推荐阅读