gpt4 book ai didi

javascript - Angular :未知 'null !' 语法

转载 作者:行者123 更新时间:2023-11-30 11:19:03 24 4
gpt4 key购买 nike

在阅读 Angular 2 源代码时,我遇到了 NgForOfContext<T>可以在官方存储库中找到哪些来源 here以及下面引起兴趣的部分。

特别是以下语法是我在普通 Javascript 和 Typescript 中都从未见过的语法:

private _applyChanges(changes: IterableChanges<T>) {
const insertTuples: RecordViewTuple<T>[] = [];
changes.forEachOperation(
(item: IterableChangeRecord<any>, adjustedPreviousIndex: number, currentIndex: number) => {
if (item.previousIndex == null) {
const view = this._viewContainer.createEmbeddedView(
this._template, new NgForOfContext<T>(null !, this.ngForOf, -1, -1), currentIndex);
const tuple = new RecordViewTuple<T>(item, view);
insertTuples.push(tuple);
} else if (currentIndex == null) {
this._viewContainer.remove(adjustedPreviousIndex);
} else {
const view = this._viewContainer.get(adjustedPreviousIndex) !;
this._viewContainer.move(view, currentIndex);
const tuple = new RecordViewTuple(item, <EmbeddedViewRef<NgForOfContext<T>>>view);
insertTuples.push(tuple);
}
});

我说的是 null !在线:

this._template, new NgForOfContext<T>(null !, this.ngForOf, -1, -1), currentIndex);

第一个参数为 null,后跟 logical not (!)。在我试图理解这段代码的过程中,我仔细检查了一下,据我所知,null是一个原始 Javascript(和 TS)类型null ! 是没有意义的.如果它是!null,这在语法上更有意义。 (非空)返回 true

为了确定我错了,我尝试编译它,但令我惊讶的是,它失败了。它提示 Unexpected )

现在,显然 Angular 是可行的。我们都知道。因此我一定是遗漏了什么。祈祷,解开这个 killer 之谜......

最佳答案

这叫做 Non-null assertion operator , 当我们有一个可以为null的值来断言它不为null时使用

  var nullable: string | null = null;
var nonNullable: string = "";

nonNullable = nullable // Error
nonNullable = nullable! // Ok, we asserted it is not null

在这种情况下,它用于(与直觉相反)断言 null 不是 null

nonNullable = null! // Ok, we assert null is not null 

Playground link

关于javascript - Angular :未知 'null !' 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50516468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com