javascript - 在某些对象属性之前,“?”是什么意思?为什么我的 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
解决方案
它在您的模板中起作用的原因是 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#可选链
推荐阅读
- java - 上下文配置不加载bean并抛出空指针异常
- r - 使用 finstr 下载 R 中的财务报表
- sql - 无法在 SQL manager lite 中创建新过程
- reactjs - React Js 中是否有 Burtin 的抗生素样本的图库?
- angularjs - AngularJS 组件和 ng-change
- powershell - Powershell 几乎不会使用 install-module 安装任何模块
- javascript - 如何使用 JavaScript 将数字/值添加到基于关键字的值?
- javascript - 在切换 jQuery 上更改按钮文本
- nlp - Word2Vec 的随机方面是什么?
- html - 导航栏和内容之间的空间