TypeScript 函式相容
比較兩個函式是否相容,首先要看引數是否相容,第二個還要看返回值是否相容。
函式引數:
首先看一段程式碼例項:
[typescript] 純文字檢視 複製程式碼let funcX = (num: number) => 0; let funcY = (num: number, str: string) => 0; funcY = funcX;
上面的賦值成立;funcxY具有兩個引數,funcX具有一個引數,之所以funcX賦值給funcY成立。
funcX函式引數少於funcY是允許的,這在JavaScript中也是允許的,比如定義一個3個引數的函式,呼叫的時候只傳遞一個,但是反過來將會報錯,程式碼如下:
[typescript] 純文字檢視 複製程式碼funcX = funxY;
上面的程式碼會報錯,funxY中的必須引數必須在funcX中找到對應的引數。
引數的名稱沒必要是相同的,只要型別相容即可:
[typescript] 純文字檢視 複製程式碼let funcX = (ant: number) => 0; let funxY = (num: number, str: string) => 0; funxY = funcX;
將funcX第一個引數更名為ant,同樣是相容的。
兩個函式引數的型別沒必要完全相同的,源函式引數引數可以賦值給目標函式對應引數,或者目標函式引數可以賦值給源函式對應引數即可,程式碼例項如下:
[typescript] 純文字檢視 複製程式碼let funcX = (ant: number&boolean) => 0; let funcY = (num: number, str: string) => 0; funcY = funcX;
源型別上有額外的可選引數不是錯誤,目標型別的可選引數在源型別裡沒有對應的引數也不是錯誤:
[typescript] 純文字檢視 複製程式碼let funcX = (ant: number,address?:string,target?:string) => 0; let funcY = (num: number, str?: string) => 0; funcY = funcX;
funcX雖然有兩個額外引數,但它們都是可選的,所以不會報錯。
對於有過載的函式,源函式的每個過載都要在目標函式上找到對應的函式簽名,規則同上。
函式的返回值:
如果目標函式的返回值型別是void,那麼源函式返回值可以是任意型別:
[typescript] 純文字檢視 複製程式碼let funcX : (ant: number) => void; let funxY = (num: number) => "螞蟻部落"; funcX = funxY;
如果不是void型別,那麼源函式的返回值需要能夠賦值給目標函式返回值型別:
[typescript] 純文字檢視 複製程式碼let funcX : (ant: number) => number|string; let funxY = (num: number) => "螞蟻部落"; funcX = funxY;
相關文章
- TypeScript---函式TypeScript函式
- TypeScript 函式介面TypeScript函式
- TypeScript(6)函式TypeScript函式
- TypeScript 箭頭函式TypeScript函式
- TypeScript 函式型別TypeScript函式型別
- TypeScript 函式過載TypeScript函式
- TypeScript 函式介紹TypeScript函式
- TypeScript學習(二)—— 函式TypeScript函式
- TypeScript 的 generic 函式TypeScript函式
- TypeScript 型別相容TypeScript型別
- TypeScript 泛型相容TypeScript泛型
- TypeScript class類相容TypeScript
- TypeScript中的函式詳解TypeScript函式
- TypeScript 中函式的理解?與 JavaScript 函式的區別?TypeScript函式JavaScript
- 瀚高DB相容MySQL if函式MySql函式
- 鴻蒙開發TypeScript語言:【函式】鴻蒙TypeScript函式
- MySQL內建函式:year()、 week()相容MySql函式
- HGDB相容MySQL date_format函式MySqlORM函式
- TypeScript 簡明教程:介面、函式與類TypeScript函式
- TypeScript基礎入門-函式-簡介TypeScript函式
- TypeScript基礎入門-函式-過載TypeScript函式
- 用TypeScript編寫釋出函式庫TypeScript函式
- 相容MySQL中的find_in_set函式MySql函式
- PostgreSQLOracle相容性-Analysis函式之keepSQLOracle函式
- 相容所有瀏覽器的getElementsByClassName()函式瀏覽器函式
- PostgreSQL核心自帶的Oracle相容函式SQLOracle函式
- Serverless 實戰 —— 函式計算 + Typescript 實踐Server函式TypeScript
- 學會TypeScript中函式過載寫法TypeScript函式
- TypeScript 定義函式的幾種寫法TypeScript函式
- 請別誤用 TypeScript 過載函式型別TypeScript函式型別
- 如何使用 vue + typescript 編寫頁面 (typescript進階-相容篇)VueTypeScript
- 瀚高資料庫相容Mysql的unhex函式資料庫MySql函式
- TypeScript 函式可選引數和預設引數TypeScript函式
- TypeScript 學習筆記 — 函式中的型別(四)TypeScript筆記函式型別
- TypeScript魔法堂:函式型別宣告其實很複雜TypeScript函式型別
- TypeScript中函式過載寫法,你在第幾層!TypeScript函式
- PostgreSQLOraclePL/SQL相容性之-AGGREGATEUSINGClause聚合函式SQLOracleGC函式
- 【45】運用成員函式模版接受所有相容型別函式型別