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

面試官:說說你對 TypeScript 中函數的理解?與 JavaScript 函數的區別?

開發 前端
在TypeScript 里,雖然已經支持類、命名空間和模塊,但函數仍然是主要定義行為的方式,TypeScript 為 JavaScript 函數添加了額外的功能,豐富了更多的應用場景。

[[422246]]

本文轉載自微信公眾號「JS每日一題」,作者灰灰。轉載本文請聯系JS每日一題公眾號。

一、是什么

函數是JavaScript 應用程序的基礎,幫助我們實現抽象層、模擬類、信息隱藏和模塊

在TypeScript 里,雖然已經支持類、命名空間和模塊,但函數仍然是主要定義行為的方式,TypeScript 為 JavaScript 函數添加了額外的功能,豐富了更多的應用場景

函數類型在 TypeScript 類型系統中扮演著非常重要的角色,它們是可組合系統的核心構建塊

二、使用方式

跟javascript 定義函數十分相似,可以通過funciton 關鍵字、箭頭函數等形式去定義,例如下面一個簡單的加法函數:

  1. const add = (a: number, b: number) => a + b 

上述只定義了函數的兩個參數類型,這個時候整個函數雖然沒有被顯式定義,但是實際上TypeScript 編譯器是能夠通過類型推斷到這個函數的類型,如下圖所示:

當鼠標放置在第三行add函數名的時候,會出現完整的函數定義類型,通過: 的形式來定義參數類型,通過 => 連接參數和返回值類型

當我們沒有提供函數實現的情況下,有兩種聲明函數類型的方式,如下所示:

  1. // 方式一 
  2. type LongHand = { 
  3.   (a: number): number; 
  4. }; 
  5.  
  6. // 方式二 
  7. type ShortHand = (a: number) => number; 

當存在函數重載時,只能使用方式一的形式

可選參數

當函數的參數可能是不存在的,只需要在參數后面加上 ? 代表參數可能不存在,如下:

  1. const add = (a: number, b?: number) => a + (b ? b : 0) 

這時候參數b可以是number類型或者undefined類型,即可以傳一個number類型或者不傳都可以

剩余類型

剩余參數與JavaScript的語法類似,需要用 ... 來表示剩余參數

如果剩余參數 rest 是一個由number類型組成的數組,則如下表示:

  1. const add = (a: number, ...rest: number[]) => rest.reduce(((a, b) => a + b), a) 

函數重載

允許創建數項名稱相同但輸入輸出類型或個數不同的子程序,它可以簡單地稱為一個單獨功能可以執行多項任務的能力

關于typescript函數重載,必須要把精確的定義放在前面,最后函數實現時,需要使用 |操作符或者?操作符,把所有可能的輸入類型全部包含進去,用于具體實現

這里的函數重載也只是多個函數的聲明,具體的邏輯還需要自己去寫,typescript并不會真的將你的多個重名 function的函數體進行合并

例如我們有一個add函數,它可以接收 string類型的參數進行拼接,也可以接收 number 類型的參數進行相加,如下:

  1. // 上邊是聲明 
  2. function add (arg1: string, arg2: string): string 
  3. function add (arg1: number, arg2: number): number 
  4. // 因為我們在下邊有具體函數的實現,所以這里并不需要添加 declare 關鍵字 
  5.  
  6. // 下邊是實現 
  7. function add (arg1: string | number, arg2: string | number) { 
  8.   // 在實現上我們要注意嚴格判斷兩個參數的類型是否相等,而不能簡單的寫一個 arg1 + arg2 
  9.   if (typeof arg1 === 'string' && typeof arg2 === 'string') { 
  10.     return arg1 + arg2 
  11.   } else if (typeof arg1 === 'number' && typeof arg2 === 'number') { 
  12.     return arg1 + arg2 
  13.   } 

三、區別

從上面可以看到:

  • 從定義的方式而言,typescript 聲明函數需要定義參數類型或者聲明返回值類型
  • typescript 在參數中,添加可選參數供使用者選擇
  • typescript 增添函數重載功能,使用者只需要通過查看函數聲明的方式,即可知道函數傳遞的參數個數以及類型

參考文獻

https://www.tslang.cn/docs/handbook/functions.html

https://zh.wikipedia.org/wiki/%E5%87%BD%E6%95%B0%E9%87%8D%E8%BD%BD

 

https://jkchao.github.io/typescript-book-chinese/typings/functions.html#%E9%87%8D%E8%BD%BD

 

責任編輯:武曉燕 來源: JS每日一題
相關推薦

2021-11-25 10:18:42

RESTfulJava互聯網

2021-08-09 07:47:40

Git面試版本

2021-09-06 10:51:27

TypeScriptJavaScript

2020-12-01 08:47:36

Java異常開發

2020-06-12 15:50:56

options前端服務器

2021-09-13 09:23:52

TypeScript命名空間

2021-09-08 07:49:34

TypeScript 泛型場景

2021-09-09 07:21:26

TypeScript 高級類型

2021-09-10 06:50:03

TypeScript裝飾器應用

2021-08-17 07:15:16

Git RebaseGit Merge面試

2021-08-19 08:36:22

Git ResetGit Revert版本

2021-09-16 07:52:18

算法應用場景

2019-05-10 10:50:04

Spring AOPJDK動態代理CGLIB動態代理

2021-11-08 11:32:01

觀察

2021-10-15 09:53:12

工具

2020-12-04 06:27:04

序列化面試官Java

2021-11-05 07:47:56

代理模式對象

2021-11-09 08:51:13

模式命令面試

2024-08-27 12:36:33

2021-11-02 22:04:58

模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人二区 | 欧美日韩a | 国产精品久久久久久婷婷天堂 | 中文字幕一区在线观看视频 | 国产精品久久国产精品 | 天天影视综合 | 国产精品国产成人国产三级 | 99日韩 | 国产精品影视在线观看 | 成年人网站在线观看视频 | 天天操网 | 毛片一级片 | 在线看片国产精品 | 精品国产乱码久久久久久蜜臀 | 国产97碰免费视频 | 国产精品一区一区 | 91精品国产自产精品男人的天堂 | 亚洲精品免费观看 | 黄色一级大片在线免费看产 | 日韩福利电影 | 超碰在线97国产 | 韩日一区二区 | 日韩欧美一区在线 | 国产午夜精品视频 | 久久精品视频在线观看 | 超碰免费观看 | 欧美日韩视频在线播放 | 一区二区三区中文字幕 | 国产片一区二区三区 | 亚洲精品视频导航 | 91精品久久久久 | 不卡的av在线 | 久久在线 | 日韩亚洲一区二区 | 91热爆在线观看 | av网站在线免费观看 | 国产成人精品一区二区三区 | 五月婷婷丁香 | 国产精品99久久久精品免费观看 | 中文字幕一区二区三 | 日韩精品一区二区三区久久 |