最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Typescript中函數(shù)類型及示例詳解

 更新時間:2023年01月05日 09:19:11   作者:疆~  
這篇文章主要介紹了Typescript中函數(shù)類型,主要包括常見寫法、可選參數(shù),默認參數(shù)及剩余參數(shù),本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

不給參數(shù)定義類型,會報錯,如下: 

常見寫法

function add1(x: number, y: number) {
  return x + y;
}
 
function add1_1(x: number, y: number): number {
  return x + y;
}
 
const add2 = function (x: number, y: number): number {
  return x + y;
};
 
const add3 = (x: number, y: number): number => x + y;
const add3_1 = (x: number, y: number) => x + y;
 
 
const add4: { (x: number, y: number): number } = (x: number, y: number): number => x + y;
 
type TAdd = {
  (x: number, y: number): number
}
const add5: TAdd = (x: number, y: number): number => x + y;
const add5_1: TAdd = function (x: number, y: number): number {
  return x + y;
};
 
interface IAdd {
  (x: number, y: number): number
}
const add6: IAdd = (x: number, y: number): number => x + y;
const add6_1: TAdd = function (x: number, y: number): number {
  return x + y;
};

函數(shù)名賦值:

const abs0: (x: number) => number = Math.abs;
 
const abs1: { (x: number): number } = Math.abs;
 
type TAbs = {
  (x: number): number
}
const abs3: TAbs = Math.abs;
 
interface IAbs {
  (x: number): number
}
const abs4: IAbs = Math.abs;
 
console.log(abs0(23) === abs1(23));  // true
console.log(abs0(23) === abs3(23));  // true
console.log(abs0(23) === abs4(23));  // true

 可選參數(shù)

在JavaScript中,函數(shù)的每一個參數(shù)都是可選參數(shù),而在TypeScript中,默認情況下函數(shù)的每一個參數(shù)都是必選參數(shù)。在調用函數(shù)時,編譯器會檢查傳入實際參數(shù)的個數(shù)與函數(shù)定義中形式參數(shù)的個數(shù)是否相等。如果兩者不相等,則會產(chǎn)生編譯錯誤。如果一個參數(shù)是可選參數(shù),那么就需要在函數(shù)類型定義中明確指定。

在函數(shù)形式參數(shù)名后面添加一個問號“?”就可以將該參數(shù)聲明為可選參數(shù)。

function add(x: number, y?: number, z?: number) {
  return x + (y ?? 0);
}

 函數(shù)的可選參數(shù)必須位于函數(shù)參數(shù)列表的末尾位置。在可選參數(shù)之后不允許再出現(xiàn)必選參數(shù),否則將產(chǎn)生編譯錯誤。

 默認參數(shù)

如果函數(shù)定義了默認參數(shù),并且默認參數(shù)處于函數(shù)參數(shù)列表末尾的位置,那么該參數(shù)將被視為可選參數(shù),在調用該函數(shù)時可以不傳入對應的實際參數(shù)值。

function add(x: number, y: number = 0) {
  return x + y;
}
 
console.log(add(1));    // 1
console.log(add(1, 2));    // 3

 同一個函數(shù)參數(shù)不允許同時聲明為可選參數(shù)和默認參數(shù),否則將產(chǎn)生編譯錯誤

如果默認參數(shù)之后存在必選參數(shù),那么該默認參數(shù)不是可選的參數(shù),在調用函數(shù)時必須傳入對應的實際參數(shù)值

function add(x: number = 0, y: number) {
  return x + y;
}
 
add(1);            // 編譯錯誤
add(1, 2);         // 正確
add(undefined, 2); // 正確

 剩余參數(shù)

必選參數(shù)、可選參數(shù) 和 默認參數(shù) 處理的都是單個參數(shù),而剩余參數(shù)處理的則是多個參數(shù)。如果函數(shù)定義中聲明了剩余參數(shù),那么在調用函數(shù)時會將多余的實際參數(shù)收集到剩余參數(shù)列表中。因此,剩余參數(shù)的類型應該為數(shù)組類型或元組類型。

數(shù)組類型的剩余參數(shù)

最常見的做法是將剩余參數(shù)的類型聲明為數(shù)組類型。在調用定義了剩余參數(shù)的函數(shù)時,剩余參數(shù)可以接受零個或多個實際參數(shù)

function f(...args: number[]) {
  console.log("args:", args)
}
 
f();
f(0);
f(0, 1); 

 元組類型的剩余參數(shù)

如果剩余參數(shù)的類型為元組類型,那么編譯器會將剩余參數(shù)展開為獨立的形式參數(shù)聲明,主要包括以下幾種情況:

常規(guī)元組類型:

function f0(...args: [boolean, number]) { }
 
// 等同于:
function f1(args_0: boolean, args_1: number) { } 

 帶有可選元素的元組類型:

function f0(...args: [boolean, number]) { }
 
// 等同于:
function f1(args_0: boolean, args_1: number) { } 

 帶有剩余元素的元組類型:

function f0(...args: [boolean, ...string[]]) { }
 
// 等同于:
function f1(args_0: boolean, ...args_1: string[]) { }

 在了解了元組類型剩余參數(shù)的展開行為后,我們也就清楚了該如何傳入對應的實際參數(shù),如下所示:

function f0(...args: [boolean, number, string]) { }
f0(true, 0, '');
 
function f1(...args: [boolean, number, string?]) { }
f1(true, 0, '');
f1(true, 0);
 
function f2(...args: [boolean, number, ...string[]]) { }
f2(true, 0);
f2(true, 0, '');
f2(true, 0, '', 'coolcou');
 
function f3(...args: [boolean, number?, ...string[]]) { }
f3(true);
f3(true, 0);
f3(true, 0, '');
f3(true, 0, '', 'coolcou');

解構參數(shù)

解構還可以應用在函數(shù)參數(shù)列表中。

未給解構參數(shù)添加類型將會報錯,如下:

可以使用類型注解為解構參數(shù)添加類型信息

function f0([x, y]: [number, number]) { }
f0([0, 1]);
 
function f1({ x, y }: { x: number; y: number }) { }
f1({ x: 0, y: 1 });

重載函數(shù)

參考:

TypeScript重載函數(shù),重載函數(shù)是指一個函數(shù)同時擁有多個同類的函數(shù)簽名。例如,一個函數(shù)擁有兩個及以上的調用簽名,或者一個構造函數(shù)擁有兩個及以上的構造簽名。當使用不同數(shù)量和類型的參數(shù)調用重載函數(shù)時,可以執(zhí)行不同的函數(shù)實現(xiàn)代碼。 TypeScript中的重載函數(shù)與其他編程語言中的重載函數(shù)略有不同。 下例中定義了一個重載函數(shù)add。它接受兩個參數(shù),若兩個參數(shù)的類型為number,則返回它們的和;若兩個參數(shù)的類型為數(shù)組,則返

http://m.fzitv.net/article/231642.htm

 構造函數(shù)類型字面量

如JavaScript提供了一個內置的Error構造函數(shù),它接受一個可選的message作為參數(shù)并返回新創(chuàng)建的Error對象

const a = new Error();
const b = new Error('Error message.');

我們可以使用如下構造函數(shù)類型字面量來表示Error構造函數(shù)的類型。該構造函數(shù)有一個可選參數(shù)message并返回Error類型的對象

let ErrorConstructor: new (message?: string) => Error;

 構造簽名

若在對象類型中定義了構造簽名類型成員,那么我們稱該對象類型為構造函數(shù)類型。構造簽名的語法如下:

{
    new (ParameterList): Type
}

 在該語法中,new是運算符關鍵字,ParameterList表示構造函數(shù)形式參數(shù)列表類型,Type表示構造函數(shù)返回值類型,兩者都是可選的。

let Dog: { new(name: string): object };
 
Dog = class {
  private name: string;
  constructor(name: string) {
    this.name = name;
  }
};
 
let dog = new Dog('coolcou');

有一些函數(shù)被設計為既可以作為普通函數(shù)使用,同時又可以作為構造函數(shù)來使用。例如,JavaScript內置的“Number()”函數(shù)和“String()”函數(shù)等都屬于這類函數(shù)。示例如下:

const a: number = Number(1);
 
const b: Number = new Number(1);

 若在對象類型中同時定義調用簽名和構造簽名,則能夠表示既可以被直接調用,又可以作為構造函數(shù)使用的函數(shù)類型。示例如下:(報錯了,不知道為什么)

declare const F: {
  new(x: number): Number;  // <- 構造簽名
  (x: number): number;      // <- 調用簽名
};
 
// 作為普通函數(shù)調用
const a: number = F(1);
 
// 作為構造函數(shù)調用
const b: Number = new F(1);

到此這篇關于Typescript中函數(shù)類型的文章就介紹到這了,更多相關Typescript中函數(shù)類型內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • functional繼承模式 摘自javascript:the good parts

    functional繼承模式 摘自javascript:the good parts

    javascript:the good parts 書中Inheritance部分講到了一種functional的繼承方式, 具體這個functional該如何翻譯,就不是很清楚了, 就直接意會一下吧
    2011-06-06
  • js時間控件只顯示年月

    js時間控件只顯示年月

    本文詳細介紹了js時間控件只顯示年月的方法。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • js tab欄切換代碼實例解析

    js tab欄切換代碼實例解析

    這篇文章主要介紹了js tab欄切換代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 純JS焦點圖特效實例(可一個頁面多用)

    純JS焦點圖特效實例(可一個頁面多用)

    下面小編就為大家?guī)硪黄僇S焦點圖特效實例(可一個頁面多用)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 詳解axios跨端架構是如何實現(xiàn)的

    詳解axios跨端架構是如何實現(xiàn)的

    我們都知道,axios 是是一個跨平臺請求方案,在瀏覽器端采用 XMLHttpRequest API 進行封裝,而在 Node.js 端則采用 http/https 模塊進行封裝,那么本文,我們將來探討這個話題:axios 的跨端架構是如何實現(xiàn)的,需要的朋友可以參考下
    2024-04-04
  • js中訪問html中iframe的文檔對象的代碼[IE6,IE7,IE8,FF]

    js中訪問html中iframe的文檔對象的代碼[IE6,IE7,IE8,FF]

    W3C的標準告訴我們,可以通過Dom對象的contentDocument屬性來返回文檔對象。
    2011-01-01
  • 解決Extjs下拉框不顯示的問題

    解決Extjs下拉框不顯示的問題

    一個父容器也是window的window下的comboBox在頁面中點擊無效,但是在控制臺中查看它的store卻是有值的,問題在于沒有顯示。下面小編給大家分享Extjs下拉框不顯示的問題,需要的的朋友參考下吧
    2017-06-06
  • javascript制作的滑動圖片菜單

    javascript制作的滑動圖片菜單

    本文給大家分享的是一款javascript制作的很漂亮的js滑動導航菜單,鼠標經(jīng)過立即快速滑動切換顯示。有需要的小火把可以參考下。
    2015-05-05
  • uni-app?web-view的使用示例詳解

    uni-app?web-view的使用示例詳解

    這篇文章主要介紹了uni-app web-view的使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • tsc性能優(yōu)化Project References使用詳解

    tsc性能優(yōu)化Project References使用詳解

    這篇文章主要為大家介紹了tsc性能優(yōu)化Project References使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11

最新評論

富裕县| 长沙市| 佛教| 正镶白旗| 焦作市| 金堂县| 蓝山县| 霞浦县| 南木林县| 遂宁市| 黎平县| 方山县| 石阡县| 巴中市| 三台县| 绥芬河市| 大洼县| 阿克| 南木林县| 丰都县| 长宁区| 宁夏| 西城区| 宁津县| 安义县| 合江县| 多伦县| 高唐县| 肇庆市| 曲水县| 历史| 津市市| 弥渡县| 原阳县| 措勤县| 花莲县| 海南省| 渑池县| 韩城市| 遂川县| 泰安市|