欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

TypeScript函數(shù)參數(shù)和返回類型的注解方式

 更新時間:2025年05月06日 14:32:49   作者:聒噪,  
這篇文章主要介紹了TypeScript函數(shù)參數(shù)和返回類型的注解方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

簡單的類型定義

還是上次代碼

function getTotal(one: number, two: number) {
  return one + two;
}

const total = getTotal(1, 2);

這時候我們寫的代碼其實(shí)是有一個小坑的,就是我們并沒有定義getTotal的返回值類型,雖然TypeScript可以自己推斷出返回值是number類型。

但是如果這時候我們的代碼寫錯了,比如寫程了下面這個樣子。

function getTotal(one: number, two: number) {
  return one + two + "";
}

const total = getTotal(1, 2);

這時候total的值就不是number類型了,但是不會報(bào)錯。

有的小伙伴這時候可能會說,可以直接給total一個類型注解,比如寫成這個樣子。

const total: number = getTotal(1, 2);

這樣寫雖然可以讓編輯器報(bào)錯,但是這還不是很高明的算法,因?yàn)槟銢]有找到錯誤的根本,這時錯誤的根本是getTotal()函數(shù)的錯誤,所以合適的做法是給函數(shù)的返回值加上類型注解,代碼如下:

function getTotal(one: number, two: number): number {
  return one + two;
}

const total = getTotal(1, 2);

這段代碼就比較嚴(yán)謹(jǐn)了,所以小伙伴們在寫代碼時,盡量讓自己的代碼更加嚴(yán)謹(jǐn)。

函數(shù)無返回值的定義方法

有時候函數(shù)是沒有返回值的,比如現(xiàn)在定義一個sayHello的函數(shù),這個函數(shù)只是簡單的terminal打印,并沒有返回值。

function sayHello() {
  console.log("hello world");
}

這就是沒有返回值的函數(shù),我們就可以給他一個類型注解void,代表沒有任何返回值。

function sayHello(): void {
  console.log("hello world");
}

如果這樣定義后,你再加入任何返回值,程序都會報(bào)錯。

never返回值類型

如果一個函數(shù)是永遠(yuǎn)也執(zhí)行不完的,就可以定義返回值為never,那什么樣的函數(shù)是永遠(yuǎn)也執(zhí)行不完的那?我們先來寫一個這樣的函數(shù)(比如執(zhí)行執(zhí)行的時候,拋出了異常,這時候就無法執(zhí)行完了)。

function errorFuntion(): never {
  throw new Error();
  console.log("Hello World");
}

還有一種是一直循環(huán),也是我們常說的死循環(huán),這樣也運(yùn)行不完,比如下面的代碼:

function forNever(): never {
  while (true) {}
  console.log("Hello JSPang");
}

函數(shù)參數(shù)為對象解構(gòu)時

這個坑有很多小伙伴掉下去過,就是當(dāng)一個函數(shù)的參數(shù)是對象時,我們?nèi)绾味x參數(shù)對象的屬性類型。

我先寫個一般javaScript的寫法。

function add({ one, two }) {
  return one + two;
}

const total = add({ one: 1, two: 2 });

在瀏覽器中你會看到直接報(bào)錯了,意思是total有可能會是任何類型,那我們要如何給這樣的參數(shù)加類型注解那?

最初你可能會這樣寫。

function add({ one: number, two: number }) {
  return one + two;
}

const total = add({ one: 1, two: 2 });

你在編輯器中會看到這種寫法是完全錯誤的。那正確的寫法應(yīng)該是這樣的。

function add({ one, two }: { one: number, two: number }): number {
  return one + two;
}

const three = add({ one: 1, two: 2 });

如果參數(shù)是對象,并且里邊只有一個屬性時,我們更容易寫錯。

錯誤代碼如下:

function getNumber({ one }: number) {
  return one;
}

const one = getNumber({ one: 1 });

看著好像沒什么問題,但實(shí)際這是有問題的,正確的代碼應(yīng)該時這樣的。

function getNumber({ one }: { one: number }): number {
  return one;
}

const one = getNumber({ one: 1 });

這樣寫才是正確的寫法,小伙伴們趕快動手練習(xí)一下吧,剛開始學(xué)你可能會覺的很麻煩,但是你寫的時間長了,你就會發(fā)現(xiàn)有規(guī)矩還是好的。人向往自由,缺鮮有人能屈駕自由。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • rollup?cli開發(fā)全面系統(tǒng)性rollup源碼分析

    rollup?cli開發(fā)全面系統(tǒng)性rollup源碼分析

    這篇文章主要為大家介紹了rollup?cli開發(fā)全網(wǎng)系統(tǒng)性rollup源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • requireJS使用指南

    requireJS使用指南

    如今最常用的JavaScript庫之一是RequireJS。最近我參與的每個項(xiàng)目,都用到了RequireJS,或者是我向它們推薦了增加RequireJS。在這篇文章中,我將描述RequireJS是什么,以及它的一些基礎(chǔ)場景。 
    2016-04-04
  • 初識SmartJS - AOP三劍客

    初識SmartJS - AOP三劍客

    隔了好久才終于又發(fā)布了一點(diǎn)東西,SmartJS是最近才開始搞的一個開源js庫,目的是做一些比較有特點(diǎn)的事情(smartjs暫時也是依賴于jquery)。
    2014-06-06
  • 淺談Sizzle的“編譯原理”

    淺談Sizzle的“編譯原理”

    正在學(xué)習(xí)Sizzle源碼或有一定前端基礎(chǔ)的同學(xué)們,可以一邊看源碼一邊看這些文章進(jìn)行驗(yàn)證,所以雖然我會分析源碼中的正則表達(dá)式,有大量的注釋,但不會講正則表達(dá)式的基本用法!
    2015-04-04
  • typescript類型體操及關(guān)鍵字使用示例詳解

    typescript類型體操及關(guān)鍵字使用示例詳解

    這篇文章主要為大家介紹了typescript類型體操及關(guān)鍵字使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • JavaScript可視化圖表庫D3.js API中文參考

    JavaScript可視化圖表庫D3.js API中文參考

    這篇文章主要介紹了JavaScript可視化圖表庫D3.js API中文參考,本文對常用的API給出一中文翻譯,需要的朋友可以參考下
    2015-01-01
  • 前端輕量級MVC框架CanJS詳解

    前端輕量級MVC框架CanJS詳解

    你可能聽說了這個新MVC框架: CanJS。還有什么比用它來創(chuàng)建一個聯(lián)系人Web App更能深入了解它的辦法呢?當(dāng)看完這篇教程,你將全面了解用它的什么工具來創(chuàng)建你自己的Web App。
    2014-09-09
  • TypeScript快速上手—html中使用ts的兩種方法

    TypeScript快速上手—html中使用ts的兩種方法

    TypeScript使用命令行編譯器tsc或其他工具手動執(zhí)行編譯,在html使用s時編譯為JavaScript,那么有沒有辦法簡化過程,不編譯直接使用,本文介紹html中使用TypeScript的兩種方法
    2024-07-07
  • 如何解決tsconfig.json配置不生效的問題

    如何解決tsconfig.json配置不生效的問題

    這篇文章主要介紹了如何解決tsconfig.json配置不生效的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • layui中的layer彈出層自定義樣式更改背景

    layui中的layer彈出層自定義樣式更改背景

    layui中的layer彈出層有很多提示框,但是我們使用最多的應(yīng)該就幾種,layer.msg、layer.alert、layer.open、layer.load等。layer?有內(nèi)置的skin:layui-layer-lan,layui-layer-molv,可以直接使用。skin不僅允許你傳入layer內(nèi)置的樣式class名,可以自定義class名。
    2023-06-06

最新評論