typescript的单感叹号作用
时间: 2024-06-16 18:04:00 浏览: 13
在TypeScript中,单感叹号(!)被作非空断言操作符。它的作用是告诉编译器某个变量一定不会为null或undefined,从而可以避免类型检查错误。
例如,当你确定一个变量已经初始化并且不会为null或undefined时,你可以使用单感叹号来告诉编译器忽略可能的错误提示。这样做可以方便地访问该变量的属性或方法。
下面是一个示例代码[^2]:
```typescript
let name: string | null = "Alice";
console.log(name!.toUpperCase()); // 输出:ALICE
name = null;
console.log(name!.toUpperCase()); // 编译器会报错,因为我们明确知道name为null,但使用了非空断言操作符!
```
需要注意的是,在使用单感叹号进行非空断言时,如果变量实际上为null或undefined,那么运行时将会抛出异常。因此,在使用非空断言之前,请确保你对变量的状态有清晰的认识,并确保它不会为null或undefined。
相关问题
typescript感叹号作用
在TypeScript中,双感叹号(!!)的作用与JavaScript中相同。它可以将一个值转换为布尔类型,并返回其对应的布尔值。
范例:
```typescript
let foo: string;
console.log(!!foo); // 输出:false
let goo = null;
console.log(!!goo); // 输出:false
let o = { flag: true };
let test = !!o.flag; // 等效于 let test = o.flag || false;
console.log(test); // 输出:true
```
typescript断言
在TypeScript中,有两种常见的断言:非空断言和确定赋值断言。非空断言使用感叹号(!)操作符,用于告诉TypeScript某个值不会是空或undefined。然而,在生成的ES5代码中,非空断言操作符会被移除,因此在浏览器中执行时,可能会输出undefined。确定赋值断言在TypeScript 2.7版本中引入,允许在实例属性和变量声明后面放置一个感叹号(!)号,用于告诉TypeScript该属性会被明确地赋值。这样可以避免在使用未赋值的变量时出现错误。
此外,还有一种类型断言,使用关键字as来进行类型转换,在使用JSX语法时应使用as而不是<>,以避免与JSX语法混淆。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
相关推荐
![ts](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)