📜  在 typescript 中,语句末尾的 bang 是什么意思 - Javascript (1)

📅  最后修改于: 2023-12-03 14:51:11.559000             🧑  作者: Mango

在 TypeScript 中,语句末尾的 "!" 符号被称为"非空断言操作符",它表示开发者明确知道变量不会为 nullundefined,并强制告诉 TypeScript 编译器相应的变量不需要进行空值检查。

非空断言操作符可以用于两种情况:

  1. 属性或方法调用中的非空断言:当一个变量被声明为可能为空的类型,但在某个特定的场景中,你确定该变量实际上不会为空时,可以使用非空断言操作符来告诉 TypeScript 编译器跳过空值检查。示例如下:

    const element: HTMLElement | null = document.getElementById("myElement");
    const elementText: string = element!.innerText;
    

    可以看到,element 变量被声明为 HTMLElement | null 类型,可能为空。但是由于我们在使用 innerText 属性之前明确知道 element 不会为空,因此使用了非空断言操作符 !

  2. 非空断言后的类型断言:当使用类型断言(Type Assertion)时,可以在断言后使用非空断言操作符来告诉 TypeScript 编译器断言结果不会为 nullundefined。示例如下:

    const myVariable: string | null = getVariable();
    const myVariableLength: number = (myVariable as string).length!;
    

    myVariable 可能为 stringnull,我们在进行类型断言时使用了非空断言操作符 !,可以告诉 TypeScript 编译器 myVariable 肯定不会为 nullundefined

需要注意的是,滥用非空断言操作符可能会导致运行时错误,因此要谨慎使用。只有在确保变量不为空的情况下才应该使用非空断言操作符,以避免潜在的空指针异常。