成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

TypeScript 中的感嘆號,你知道它嗎?

開發 前端
當使用非空斷言運算符時,就表示告訴TypeScript,我比你更了解這個代碼邏輯,會為此負責,所以我們需要充分了解自己的代碼之后再確定是否要使用這個運算符。否則,如果由于某種原因斷言不正確,則會發生運行時錯誤。

在 TypeScript 中感嘆號 ( ! ) 運算符可以使編譯器忽略一些錯誤,下面就來看看感嘆號運算符有哪些實際的用途的以及何時使用。

1. 非空斷言運算符

感嘆號運算符稱為非空斷言運算符,添加此運算符會使編譯器忽略undefined和null類型。來看例子:

const parseValue = (value: string) => {
// ...
};

const prepareValue = (value?: string) => {
// ...
parseValue(value);
};

對于 prepareValue 方法的 value 參數,TypeScript就會報出以下錯誤:

類型“string | undefined”的參數不能賦給類型“string”的參數。
不能將類型“undefined”分配給類型“string”。

類型“string | undefined”的參數不能賦給類型“string”的參數。不能將類型“undefined”分配給類型“string”。

因為我們希望 prepareValue 函數中的 value 是 undefined 或 string,但是我們將它傳遞給了 parseValue 函數,它的參數只能是 string。所以就報了這個錯誤。

但是,在某些情況下,我們可以確定 value 不會是 undefined,而這就是需要非空斷言運算符的情況:

const parseValue = (value: string) => {
// ...
};

const prepareValue = (value?: string) => {
// ...
parseValue(value!);
};

這樣就不會報錯了。但是,在使用它時應該非常小心,因為如果 value 的值是undefined ,它可能會導致意外的錯誤。

2. 使用示例

既然知道了非空斷言運算符,下面就來看幾個真實的例子。

在列表中搜索是否存在某個項目:

interface Config {
id: number;
path: string;
}

const configs: Config[] = [
{
id: 1,
path: "path/to/config/1",
},
{
id: 2,
path: "path/to/config/2",
},
];

const getConfig = (id: number) => {
return configs.find((config) => config.id === id);
};

const config = getConfig(1);

由于搜索的內容不一定存在于列表中,所以 config 變量的類型是 Config | undefined,我們就可以使用可以使用費控斷言運算符告訴 TypeScript,config 應該是存在的,因此不必假設它是 undefined。

const getConfig = (id: number) => {
return configs.find((config) => config.id === id)!;
};

const config = getConfig(1);

這時,config 變量的類型就是 Config。這時再從 config 中獲取任何屬性時,就不需要再檢查它是否存在了。

再來看一個例子,React 中的 Refs 提供了一種訪問 DOM 節點或 React 元素的方法:

const App = () => {
const ref = useRef<HTMLDivElement>(null);

const handleClick = () => {
if(ref.current) {
console.log(ref.current.getBoundingClientRect());
}
};

return (
<div className="App" ref={ref}>
<button onClick={handleClick}>Click</button>
</div>
);
};

這里創建了一個簡單的組件,它可以訪問 class 為 App 的 DOM 節點。組件中有一個按鈕,當點擊該按鈕時,會顯示元素的大小以及其在視口中的位置。我們可以確定被訪問的元素是在點擊按鈕后掛載的,所以可以在 TypeScript 中添加非空斷言運算符表示這個元素是一定存在的:

const App = () => {
const handleClick = () => {
console.log(ref.current!.getBoundingClientRect());
};
};

當使用非空斷言運算符時,就表示告訴TypeScript,我比你更了解這個代碼邏輯,會為此負責,所以我們需要充分了解自己的代碼之后再確定是否要使用這個運算符。否則,如果由于某種原因斷言不正確,則會發生運行時錯誤。

責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2015-06-19 11:00:09

bash

2023-01-13 16:53:17

Annotation底層元注解

2020-08-13 09:35:50

Linux命令軟件

2020-12-24 10:40:44

Linux命令文件

2022-04-07 16:03:36

JavaScriptTypeScript

2023-05-07 08:04:36

Java程序回收算法

2023-05-10 11:16:01

Java虛擬機對象

2020-05-15 14:34:16

C語言丹尼斯 · 里奇開發者

2022-01-06 08:58:49

代碼

2022-06-29 08:32:04

游標MySQL服務器

2022-09-22 14:55:31

前端JavaScripthis

2022-09-26 13:10:17

JavaScriptthis

2018-08-20 20:46:07

2021-02-18 16:06:43

JavaStream代碼

2020-09-19 17:44:32

Linux計算器命令

2023-05-05 08:41:16

SQL字符函數

2021-02-26 08:46:46

PHY寄存器網絡

2019-04-15 10:45:13

pingICMP協議

2022-08-10 09:03:35

TypeScript前端

2020-09-15 08:35:57

TypeScript JavaScript類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一在线 | 日韩欧美在线视频 | 黄色欧美视频 | 2018国产精品| 日韩一区二区三区在线视频 | 精品一区电影 | 欧美极品视频在线观看 | www.黄网| 成人国产精品免费观看 | 国产精品久久av | 美女天天操 | 国产精品一区二区三级 | 日韩久久久一区二区 | 日韩精品一区二区三区中文在线 | 亚洲网站在线 | 国产成人精品久久二区二区 | 欧美性网 | 一区视频在线免费观看 | 精品免费国产视频 | 亚洲最大看片网站 | 亚洲第一av网站 | 日韩欧美亚洲 | 美女天堂 | av免费在线观看网站 | 国产亚洲精品久久久久久牛牛 | av先锋资源 | 亚洲欧美日韩在线一区二区 | 国产欧美精品一区二区三区 | 黄色大片免费网站 | 国产欧美精品一区二区色综合朱莉 | 成人性视频免费网站 | av免费成人| 中文字幕亚洲欧美 | 国产黄色小视频在线观看 | 免费国产网站 | 国产精品18hdxxxⅹ在线 | 国产精品亚洲欧美日韩一区在线 | 国产在线一区二 | 久在线| 偷拍自拍网站 | 国产情侣一区 |