精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

關(guān)于 TypeScript 接口,你需要知道的十件事

開發(fā) 前端
TypeScript 中的接口是一個(gè)非常靈活的概念。除了抽象類的部分行為外,它還經(jīng)常被用來(lái)描述“一個(gè)對(duì)象的形狀”。

TypeScript 中的接口是一個(gè)非常靈活的概念。除了抽象類的部分行為外,它還經(jīng)常被用來(lái)描述“一個(gè)對(duì)象的形狀”。

01.必需的屬性

定義接口時(shí),需要使用interface關(guān)鍵字:

interface User {
name: string;
sex: string;
}
const user: User = {
name: "Bytefer",
sex: "male",
};

在上面的代碼中,我們定義了一個(gè)用戶界面。然后定義一個(gè)用戶變量并將其類型設(shè)置為用戶類型。

但是,如果我們給用戶變量賦值,相關(guān)的屬性就丟失了。然后,TypeScript編譯器會(huì)提示相關(guān)錯(cuò)誤。例如,在下面的代碼中,我們?cè)诜峙鋾r(shí)缺少 sex 屬性:

那么如何解決上面的錯(cuò)誤呢?解決方案之一是使用 ? 在定義接口時(shí)聲明一些屬性是可選的。

02.可選屬性

interface User {
name: string;
sex?: string;
}
let user: User = { // OK
name: "Bytefer",
};
user = { // Ok
name: "Bytefer",
sex: "male",
};

既然不允許缺少屬性,那么可以添加未聲明的屬性嗎?

圖片

從上圖可以看出,使用對(duì)象字面量賦值時(shí),包括未聲明的age屬性,也會(huì)報(bào)錯(cuò)。解決此問(wèn)題的最簡(jiǎn)單方法是向 User 類型添加一個(gè) age 屬性:

interface User {
name: string;
sex?: string;
age: number;
}

這種方案雖然可以解決問(wèn)題,但是如果我們想添加其他任意屬性,這種方式就不太好了。為滿足上述要求,我們可以使用索引簽名。

03.索引簽名

索引簽名的語(yǔ)法如下:

鍵的類型只能是字符串、數(shù)字、符號(hào)或模板字面量類型,而值的類型可以是任何類型。

現(xiàn)在我們了解了索引簽名的語(yǔ)法,讓我們更新用戶類型:

interface User {
name: string;
sex?: string;
[propName: string]: any; // Index Signatures
}

更新 User 類型,并添加新的 age 和 email 屬性后,TypeScript 編譯器不會(huì)提示錯(cuò)誤。

let user: User = {
name: "Bytefer",
sex: "male",
age: 30,
email: "bytefer@gmail.com"
};

04.只讀屬性

在web系統(tǒng)中,我們需要區(qū)分不同的用戶,一般情況下,我們會(huì)使用一個(gè)id屬性來(lái)標(biāo)識(shí)不同的用戶。該屬性由Web系統(tǒng)自動(dòng)生成,用戶無(wú)法修改。對(duì)于上面的場(chǎng)景,我們可以使用readonly修飾符來(lái)定義只讀屬性。

除了屬性之外,對(duì)象還可能包含方法。在使用接口定義對(duì)象類型時(shí),我們還可以同時(shí)聲明對(duì)象上存在的方法:

interface User {
id: string;
name: string;
say(words: string): void;
}
let user: User = {
id: "6666",
name: "Bytefer",
say(words: string) {
console.log(words);
},
};

05.Call Signatures

描述函數(shù)的最簡(jiǎn)單方法是使用函數(shù)類型表達(dá)式,這些類型在語(yǔ)法上類似于箭頭函數(shù):

const log: (msg: string) => void = (msg: string) => {
console.log(msg);
};
log("Bytefer");

語(yǔ)法 (msg: string) => void 的意思是“一個(gè)函數(shù),它有一個(gè)名為 msg 的參數(shù),類型為字符串,沒(méi)有返回值”。當(dāng)然,我們可以使用類型別名來(lái)命名函數(shù)類型:

type LogFn = (msg: string) => void;
const log: LogFn = (msg: string) => {
console.log(msg);
};

如果我們想描述一些可以用屬性調(diào)用的東西,函數(shù)本身也是一個(gè)對(duì)象。那么函數(shù)類型表達(dá)式不能滿足這個(gè)要求。對(duì)于這種場(chǎng)景,我們可以在定義對(duì)象類型時(shí)使用調(diào)用簽名:

圖片

需要注意的是,在聲明調(diào)用簽名時(shí),也支持重載:

interface Logger {
type: string;
(msg: string): void;
(msg: string, timestamp: number): void
(msg: string, timestamp: number, module: string): void
}

06.構(gòu)建簽名

除了直接調(diào)用函數(shù),我們還可以使用new運(yùn)算符來(lái)調(diào)用函數(shù),一般稱為構(gòu)造函數(shù)。我們可以通過(guò)在調(diào)用簽名前添加 new 關(guān)鍵字來(lái)編寫構(gòu)造簽名:

interface PointConstructor {
new (x: number, y: number): { x: number; y: number };
}
function createPoint(ctor: PointConstructor,
x: number = 0, y: number = 0) {
return new ctor(x, y);
}
class Point {
constructor(public x: number, public y: number) {}
}
const zero = createPoint(Point);
console.log(zero);

07.混合類型

那么在定義接口的時(shí)候,是否可以同時(shí)使用調(diào)用簽名和構(gòu)造簽名呢?答案是肯定的,我們常用的Date對(duì)象,它的類型是DateConstructor,其中調(diào)用簽名和構(gòu)造簽名都用到了:

declare var Date: DateConstructor;

在上面的代碼中,除了調(diào)用簽名和構(gòu)造簽名外,還定義了 Date 構(gòu)造函數(shù)上的屬性和方法。

08.通用接口

通用類型也可以與接口一起使用。下面是一個(gè)通用接口。

interface KeyPair<T, U> {
key: T;
value: U;
}
let kv1: KeyPair<number, string> = { key: 1, value: "Bytefer" };

09.擴(kuò)展接口

接口可以擴(kuò)展一個(gè)或多個(gè)接口,這使得編寫接口靈活且可重用。

interface Point1D {
x: number;
}
interface Point2D extends Point1D {
y: number;
}
interface Point3D extends Point2D {
z: number;
}
const point1D = { x: 0 };
const point2D = { x: 0, y: 0 };
const point3D = { x: 0, y: 0, z: 0 };

除了擴(kuò)展單個(gè)接口,TypeScript 還允許我們擴(kuò)展多個(gè)接口:

interface CanSay {
say(words: string) :void
}
interface CanWalk {
walk(): void;
}
interface Human extends CanSay, CanWalk {
name: string;
}

10.擴(kuò)展類

當(dāng)聲明一個(gè)接口時(shí),我們可以擴(kuò)展一個(gè)或多個(gè)接口。其實(shí)我們也可以擴(kuò)展一個(gè)聲明的類:

class Point1D {
public x!: number;
}
interface Point2D extends Point1D {
y: number;
}
const point2D: Point2D = { x: 0, y: 0 }

對(duì)于一個(gè)類,在聲明類的時(shí)候,可以同時(shí)實(shí)現(xiàn)多個(gè)接口:

interface CanSay {
say(words: string) :void
}
interface CanWalk {
walk(): void;
}
class Person implements CanSay, CanWalk {
constructor(public name: string) {}
public say(words: string) :void {
console.log(`${this.name} says:${words}`);
}
public walk(): void {
console.log(`${this.name} walk with feet`);
}
}

對(duì)于 TypeScript 開發(fā)者來(lái)說(shuō),接口和類型有很多相似之處,當(dāng)然也有一些不同。

責(zé)任編輯:華軒 來(lái)源: web前端開發(fā)
相關(guān)推薦

2015-09-08 11:47:00

微軟容器

2023-04-10 16:02:59

2023-04-04 14:20:27

2023-06-30 13:35:12

2017-05-02 11:36:00

Java

2010-09-27 09:24:09

云計(jì)算

2024-10-14 12:42:06

2020-08-10 15:30:24

XDR網(wǎng)絡(luò)安全網(wǎng)絡(luò)威脅

2015-10-10 09:29:32

GitGithub

2025-02-10 08:59:54

2015-10-10 13:11:35

GitGithub工具

2021-04-15 08:04:27

容器DevOps程序

2015-08-11 17:55:21

谷歌重組科技

2015-10-26 16:34:08

安裝Ubuntu 15.1Linux

2022-10-09 16:35:08

Redis開發(fā)集群

2023-05-18 15:50:59

Arch Linux命令

2009-05-26 09:48:34

2015-03-04 14:54:47

DockerIT管理基礎(chǔ)設(shè)施

2010-08-09 13:13:00

Flex程序員

2013-11-13 11:05:41

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美xxxx老人做受| 欧美国产日韩一二三区| 欧美精品videossex性护士| 香蕉视频1024| 亚洲优女在线| 亚洲特级片在线| 国产伦精品一区二区三区视频免费| 日日夜夜综合网| 欧美日韩一二三四| 日韩午夜在线观看视频| 777米奇影视第四色| 日韩专区在线| 99久久精品免费精品国产| 国产精品久久久久久婷婷天堂| 国产又黄又爽又无遮挡| 少妇精品久久久一区二区| 制服丝袜亚洲播放| 日本www在线播放| h片在线观看网站| 国产亚洲精品bt天堂精选| 91九色蝌蚪成人| 波多野结衣视频在线观看| 亚洲视频福利| 久久精品成人动漫| 精品无码国产污污污免费网站 | 亚洲一区二区在线免费| 91麻豆精品一二三区在线| 欧美日韩国产在线看| 永久免费网站视频在线观看| 99青草视频在线播放视| aa级大片欧美| 国产精品综合久久久久久| 国产又色又爽又黄又免费| 日韩精品国产精品| 欧美一区二区三区图| 久久精品99国产精| 91亚洲国产成人久久精品| 亚洲性无码av在线| 日本黄色网址大全| 女同另类激情重口| 欧美成人精品二区三区99精品| 手机免费av片| 成人激情视屏| 欧美性猛交xxxx乱大交退制版 | 欧美电影免费看| 亚洲成a人v欧美综合天堂下载| 在线观看三级网站| 黄色网页在线免费看| 欧美国产精品一区二区| 日本成人三级电影网站| 欧美日韩在线精品一区二区三区激情综| 高清视频一区二区| 99在线视频播放| 成人av免费播放| 国产成人亚洲精品青草天美| 亚洲自拍小视频| 性欧美videos另类hd| 国产福利91精品一区| 999国产在线| 亚洲黄色小说网| 成人亚洲一区二区一| 国产精品日韩一区二区| 涩涩视频免费看| 99精品热视频| 欧美12av| 在线激情小视频| 亚洲欧洲三级电影| 伊人网在线免费| 欧美aaaxxxx做受视频| 亚洲一级片在线观看| 夜夜添无码一区二区三区| free性m.freesex欧美| 色综合久久久久综合99| 国产又黄又猛视频| 91综合国产| 欧美夫妻性生活| 丰满饥渴老女人hd| 国内精品国产成人国产三级粉色| 亚洲高清久久网| 色欲av无码一区二区三区| 国产精品免费99久久久| 日韩在线观看免费高清完整版| 久久国产精品国语对白| 在线电影一区| 国产精品国产福利国产秒拍 | 欧美大电影免费观看| 欧美日韩一区二区三区不卡| 麻豆网站免费观看| 欧美成a人免费观看久久| 亚洲人成网在线播放| 成年人视频软件| 欧美精品一卡| 日本老师69xxx| 国产又粗又猛又爽又黄的| 成人亚洲一区二区一| 亚洲成人自拍| 变态调教一区二区三区| 欧美午夜寂寞影院| 第一页在线视频| 国产一区二区三区日韩精品| 精品中文字幕在线观看| 国产精品免费精品一区| 国内精品自线一区二区三区视频| 国产色综合一区二区三区| 北岛玲日韩精品一区二区三区| 一个色综合网站| 成人在线观看黄| 136福利精品导航| 一个人看的www久久| 日本在线视频中文字幕| 捆绑紧缚一区二区三区视频| 精品伦理一区二区三区| 在线视频观看国产| 91高清在线观看| 欧美xxxx×黑人性爽| 久久一区91| 日本亚洲欧洲色α| 亚洲精品18在线观看| 国产精品久久毛片| 欧美一级在线看| 中文字幕一区日韩精品| zzjj国产精品一区二区| 国产精品视频一区在线观看| 国产91精品一区二区麻豆网站 | 欧美精选一区二区| 右手影院亚洲欧美| 欧美日韩 国产精品| 国产精品视频中文字幕91| 欧洲免费在线视频| 亚洲第一av色| 最新中文字幕日本| 国产精品毛片久久| 国产精品女视频| 青青免费在线视频| 狠狠躁夜夜躁人人爽天天天天97 | 久久人人爽爽爽人久久久| 青青青在线观看视频| 成人激情久久| 久久精品小视频| 97精品人妻一区二区三区香蕉 | 久久久久久久久艹| 国内精品自线一区二区三区视频| 亚洲欧美精品在线观看| 国产成人精品123区免费视频| 日韩精品视频在线| 91蜜桃视频在线观看| 国产成人在线影院| 9色视频在线观看| 精品国产鲁一鲁****| 久久资源免费视频| 国产精品视频一区二区三区,| 国产精品久久一卡二卡| 中文字幕久久av| 亚洲精品二区三区| 91在线|亚洲| av网站导航在线观看免费| 日韩一区二区三区av| 国产精品白嫩白嫩大学美女| 国产精品中文字幕日韩精品| 777久久精品一区二区三区无码| 国产精品欧美一区二区三区不卡| 久久成年人免费电影| www.av网站| 亚洲尤物在线视频观看| 国产白袜脚足j棉袜在线观看| 99热精品在线| 青青草原亚洲| 亚洲欧洲二区| 欧美黄色片视频| 天堂av在线免费观看| 一本久久精品一区二区| 99在线视频免费| 韩国理伦片一区二区三区在线播放 | 97精品在线视频| 青青免费在线视频| 精品污污网站免费看| 久久99久久99精品免费看小说| 国产自产v一区二区三区c| 日韩在线视频在线| 亚洲第一二三区| 国产日韩欧美视频| 羞羞的视频在线观看| 日韩大片免费观看视频播放| 波多野结衣电影在线播放| 亚洲欧洲www| 蜜臀视频在线观看| 丝袜a∨在线一区二区三区不卡| 亚洲一区二区三区午夜| 91麻豆精品激情在线观看最新| 欧美性做爰毛片| 免费网站看v片在线a| 精品国产网站在线观看| 一级片在线免费播放| 亚洲视频在线一区观看| xxxx黄色片| 理论片日本一区| 国产中文字幕视频在线观看| 99re66热这里只有精品8| 国产精品免费区二区三区观看 | 免费黄网在线观看| 91精品国产色综合久久不卡蜜臀| 国产精品黄色大片| 亚洲欧洲日产国码二区| 草草影院第一页| 国产精品白丝jk白祙喷水网站| 日本少妇高潮喷水视频| 99精品视频在线| 美女主播视频一区| 国产成人久久精品一区二区三区| 欧美中文字幕在线播放| 怡红院红怡院欧美aⅴ怡春院| 日韩精品中文字幕久久臀| a毛片在线免费观看| 精品久久久久久久中文字幕| 国产精品精品软件男同| 国产肉丝袜一区二区| 中文字幕a在线观看| 国产一区二区三区香蕉| 97公开免费视频| 国产欧美在线| 91国在线高清视频| 久久亚洲成人| 日韩欧美精品久久| 三级精品视频| 国产精品污www一区二区三区| 豆花视频一区| 国产精品久久久久久婷婷天堂| 自拍偷拍欧美视频| 97热精品视频官网| 波多野结衣中文字幕久久| 久久综合电影一区| 精产国品自在线www| 中文国产成人精品| 黄色片在线免费观看| 日韩精品极品在线观看| 天天干天天草天天射| 欧美sm美女调教| 亚洲成人久久精品| 欧美一级一级性生活免费录像| 91午夜交换视频| 欧美精品777| 国产精品无码在线播放| 欧美人与性动xxxx| 一级黄色片在线观看| 欧美日韩在线播放三区四区| 黄色污污视频软件| 日本韩国精品在线| 久久精品视频2| 91久久免费观看| 精品国产www| 欧美日韩激情在线| 一级淫片免费看| 欧美精品vⅰdeose4hd| 国产精品一级视频| 欧美一级一区二区| 亚洲精品视频网| 日韩av在线导航| 久久精品国产亚洲a∨麻豆| 国产午夜精品一区二区三区| 中文字幕日本在线观看| 久久久成人av| 日日夜夜天天综合入口| 久久久久这里只有精品| 精品三级久久| 国产福利成人在线| 色8久久久久| 国产福利不卡| 自拍偷拍一区| 一区二区三区四区| 欧美精品一卡| 日韩欧美国产免费| 蜜臀av一区二区在线免费观看| 欧美男女交配视频| 国产精品正在播放| 日本不卡视频一区| 久久久亚洲国产美女国产盗摄| 9.1片黄在线观看| 亚洲欧美日韩中文播放| 伊人国产在线观看| 色88888久久久久久影院按摩| 最新中文字幕第一页| 欧美成人video| 久久伊伊香蕉| 久久人人爽人人爽人人片亚洲| 国产第一页在线视频| 国产高清在线不卡| 美女久久精品| 日本一区视频在线播放| 亚洲影视一区| 大肉大捧一进一出好爽动态图| 国产一区二区三区蝌蚪| 国产乱了高清露脸对白| 亚洲视频在线观看一区| 国产成人一级片| 欧美一区二区视频免费观看| 天天操天天干天天| 久久久av网站| 成人免费看视频网站| 亚洲自拍高清视频网站| 国产欧美一区二区精品久久久| 亚洲天堂第一区| 日本成人在线视频网站| 四虎精品一区二区| 中文字幕一区二区三区在线观看 | 欧美一区二区三区成人| 深夜福利免费在线观看| 欧美成人精品在线视频| 成人视屏在线观看| 成人动漫在线视频| 日本一区二区免费高清| 男女av免费观看| 成人av综合一区| 国产美女福利视频| 91高清在线观看| 人成免费电影一二三区在线观看| 欧美片一区二区三区| 日韩专区视频网站| 秋霞在线观看一区二区三区| 亚洲高清在线| 又色又爽又黄18网站| 中文字幕中文在线不卡住| 国产污视频网站| 亚洲国产天堂久久国产91| 中文在线免费| 成人综合网网址| 久久精品高清| 天美星空大象mv在线观看视频| 久久免费电影网| 日韩 欧美 综合| 亚洲成人精品av| 国产色婷婷在线| 亚洲影院污污.| 中文字幕亚洲综合久久五月天色无吗''| 日本 片 成人 在线| 国产色爱av资源综合区| 9i精品福利一区二区三区| 日韩精品黄色网| 亚洲电影观看| 欧美尤物一区| 老司机免费视频久久| 亚洲一级中文字幕| 欧美天堂在线观看| 日产精品久久久久久久性色| 97久久伊人激情网| 看电影就来5566av视频在线播放| 蜜臀a∨国产成人精品| 我看黄色一级片| 国产日产欧美一区二区视频| 亚洲熟女综合色一区二区三区| 日韩久久午夜影院| 裤袜国产欧美精品一区| 免费在线观看91| 日日夜夜免费精品| 日本成人午夜影院| 欧美在线免费视屏| 色网站在线看| 亚洲999一在线观看www| 欧美激情第8页| 国产精品无码一区二区三| 欧美视频中文在线看| 成人在线观看免费| 成人av在线亚洲| 国自产拍偷拍福利精品免费一| 男人网站在线观看| 色婷婷国产精品综合在线观看| 高清性色生活片在线观看| 国产欧美在线观看| 午夜欧美理论片| 亚洲一区二区三区四区五区六区 | 五月婷婷激情五月| 日韩在线观看高清| 91综合久久爱com| 91视频最新入口| 欧美激情一区二区三区四区| 国产精品女人久久久| 国产69精品久久久| 久久av导航| 国产资源中文字幕| 精品动漫一区二区三区| eeuss影院www在线播放| 亚洲在线第一页| 性色一区二区三区| 欧美h片在线观看| 亚洲成人在线视频播放| 中文字幕av一区二区三区佐山爱| 欧美亚洲视频一区| 99在线视频精品| 亚洲天堂中文字幕在线| 国模吧一区二区三区| 欧美码中文字幕在线| 中文字幕乱妇无码av在线| 欧美视频在线观看 亚洲欧| 成人日韩欧美| 欧美午夜视频在线| 国产成人亚洲精品狼色在线| 亚洲 欧美 中文字幕| 欧美日韩国产成人在线| 欧美综合一区| 天堂www中文在线资源| 欧美视频精品在线|