日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Typescript中定义接口(interface)

發布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Typescript中定义接口(interface) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 接口的作用:
    • 設置接口可選屬性:
      • 額外屬性檢查:
    • 設置接口只讀屬性:
    • 函數類型接口:
    • 可索引類型接口:

接口的作用:

接口,英文:interface,其作用可以簡單的理解為:為我們的代碼提供一種約定。

在Typescript中是這么描述的:

  • TypeScript的核心原則之一是對值所具有的結構進行類型檢查。它有時被稱做“鴨式辨型法”或“結構性子類型化”。
  • 在TypeScript里,接口的作用就是為這些類型命名和為你的代碼或第三方代碼定義契約。

舉個例子:

// 定義接口 Person interface Person {name: string;age: number; }// 指定定義的變量 man 的類型為我們的 Person "類型" 【這么表達不是很準確,只是為了方便理解】 let man: Person;// 此時,我們對 man 賦值時,man 就必須遵守我們定義的 Person 約束,即必須存在 number 類型的 age 字段 和 string 類型的 name 字段 man = { age: 10, name: 'syw' } # 或者這樣 function fun(women:Person){} // 參數 womem 也必須遵守 Person 約束

上面的例子我簡單說了一下如何定義一個接口和接口的作用,下面我就簡單的說一下接口的其他玩法:

設置接口可選屬性:

帶有可選屬性的接口與普通的接口定義差不多,只是在可選屬性名字定義的后面加一個 ? 符號。

interface Person {name: stringage?: number }

可選屬性,我們最常見的使用情況是,不確定這個參數是否會傳,或者存在。

在Typescript中是這么描述可選參數的好處的:

  • 可選屬性的好處之一是可以對可能存在的屬性進行預定義,好處之二是可以捕獲引用了不存在的屬性時的錯誤。

額外屬性檢查:

說起來這一點,簡單總結一下就是:我們可以設置屬性是可選的,但是不能傳錯誤的屬性。

  • 以上面的 Person 接口為例,如果我們使用時把 age 屬性 錯誤寫成了 aag,typescript 會報錯,即使 age 屬性本身不是必須傳的。

這就是額外屬性檢查。

當然,我們也可以使用 類型斷言 繞開這些屬性檢查,上鏈接:TypeScript中的類型斷言[as語法 | <> 語法]

設置接口只讀屬性:

一些對象屬性只能在對象剛剛創建的時候修改其值。 所以我們可以在屬性名前用 readonly來指定只讀屬性 。

interface Person {readonly name: string;readonly age: number; } // 賦初始值 let man: Person = {name: 'syw', age: 10};// 如果此時在對值進行修改,就會出錯。 man.age = 20// error! // Cannot assign to 'age' because it is a read-only property.

說起來,只讀屬性使用起來的效果和 const 差不多,當然兩者根本不是一個東西,我這么說只是為了好理解。

在Typescript中是這么描述 readonly 和 const 的:

  • 最簡單判斷該用readonly還是const的方法是看要把它做為變量使用還是做為一個屬性。 做為變量使用的話用 const,若做為屬性則使用readonly。

函數類型接口:

簡單來說,函數類型的接口就是規定了 函數的參數類型以及函數的返回值類型。

interface PersonFun {(name: string, age: number): boolean } // 定義函數,符合 PersonFun 約束 let manFun: PersonFun = (name: string, age: number) => {return age > 10; }

注意:

  • 函數參數類型不可更改,包括返回值也必須遵守約束。

  • 函數參數名可以不用和接口中的名字對應,只要求對應參數位置的類型兼容。

    // 這樣也是符合要求的 let manFun: PersonFun = (name12: string, age12: number) => {return age > 10; }
  • 可索引類型接口:

    可索引類型接口簡單來說就是,我們可以規定 索引的類型 和 返回值的類型。

    • 例如:數組中,我們可以規定 以 number 類型的值來索引,索引到的是一個 string 類型的值,這樣的話其實這個數組的形式基本就固定了。
    interface PersonArr {[index: number]: string } // 定義數組 let manArr: PersonArr = ['syw','syw1','syw2']; // 查詢 manArr[0]; // 此時 0 作為索引是 number 類型,0 號元素返回的是 syw 是 string 類型

    Typescript 中支持兩種索引簽名,其實就是索引類型,分別是:number 和 string。

    并且,如果我們使用 number 類型的索引,那么定義的返回值類型 必須是 定義 string 類型索引返回值的子類型。

    Typescript 是這么解釋這句話的:

    • 當使用 number來索引時,JavaScript會將它轉換成string然后再去索引對象。
    • 也就是說用 100(一個number)去索引等同于使用"100"(一個string)去索引,因此兩者需要保持一致。

    我一開始看到這句話的時候,文字意思看懂了,但是不知道怎么去簡單的表述這句話,仔細研究了一下才知道【可能是我太菜】,其實很簡單:

    // 比如我這個 PersonArr 有兩個索引,一個是 index(number)類型,一個是 item(string) 類型,那么我在定義這個兩個索引的返回值的時候,就必須嚴格遵守上面說的: // 使用 number 類型的索引,那么定義的返回值類型 必須是 定義 string 類型索引返回值的子類型。// 所以我下面定義的這個接口就會報錯 interface PersonArr {[index: number]: string;[item: string]: number; } // 因為 index 返回值是 string 類型 ,很顯然不是 item 返回值 number 類型的子類型 // 怎么寫才對呢?最簡單的方法,把 index 返回值的類型也改成 number 就好了。

    完結·撒花

    總結

    以上是生活随笔為你收集整理的Typescript中定义接口(interface)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美1区2区3区 | 精品欧美乱码久久久久久 | 极品美女销魂一区二区三区 | 国产精品99久久久久久一二区 | 性生活av| 欧美91精品久久久久国产性生爱 | 欧美高清视频一区二区 | 亚洲国产精品久久久久久 | xxxxⅹxxxhd日本8hd | 手机av在线免费观看 | 日本高清黄色电影 | 亚洲熟女乱色综合亚洲小说 | 波多野结衣女同 | 精品麻豆一区二区 | 在线观看国产91 | 亚洲爽爽网 | 日韩成人无码影院 | 熟女自拍一区 | 青青草自拍偷拍 | 五号特工组之偷天换月 | 久久人人艹 | 欧美日韩在线看 | 少妇资源 | 国产日韩在线一区 | 五月天精品视频 | 亚洲欧美视频在线观看 | 免费网站黄色 | 欧美国产日韩综合 | 日本成人在线网站 | 911亚洲精选| 国产免费一区二区三区最新6 | 色一区二区 | 秋霞国产精品 | 91久久婷婷 | 男女久久久 | 日本成人三级电影 | 国产特级视频 | 国产在线观看你懂的 | av国产一区二区 | 中文字幕不卡视频 | 日韩欧美少妇 | 久久奇米 | 97精品人妻一区二区三区在线 | av拍拍拍 | 蜜芽在线视频 | 黑人精品一区二区 | 怡春院在线视频 | 91影院在线观看 | 亚洲熟妇av乱码在线观看 | 国产又黄又粗的视频 | 黄色成人在线播放 | 日韩欧美精品在线播放 | 人人插人人 | 91网站免费看 | 亚洲国产精品视频在线观看 | 福利午夜视频 | 日韩欧美中字 | 欧美亚洲国产日韩 | 国内视频自拍 | 国产精品成久久久久三级 | 夜色一区 | 青青青国内视频在线观看软件 | 伊人影院在线播放 | 成人香蕉视频 | 少妇性高潮视频 | 色网在线视频 | 欧美日韩国产精品一区 | 天天看av| 播放毛片| 视频在线亚洲 | 四虎精品在线观看 | aaa级片| 久久精品人人 | 亚洲日本片| 性色av一区二区三区在线观看 | 亚洲乱妇| 女人和拘做爰正片视频 | 一区二区成人av | 免费激情网址 | 亚洲大尺度在线观看 | 精品一区二区三区四区视频 | 一级黄色性生活片 | 久久久精品视频在线 | 五月天婷婷在线观看 | av在线免费播放网址 | 中文字幕av在线免费 | 女尊高h男高潮呻吟 | 91精品国自产在线偷拍蜜桃 | 久久久久亚洲AV成人无码国产 | 无码少妇一区二区三区芒果 | 好男人www社区在线视频夜恋 | 美女扒开尿口让男人桶 | 亚洲一区二区美女 | 国产欧美日韩中文字幕 | 水蜜桃91 | 欧美鲁鲁 | 欧美无砖砖区免费 | 国产一区二区三区观看 | 色爱成人综合 |