精品欧美一区二区三区在线观看 _久久久久国色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)

正在播放久久| 久色乳综合思思在线视频| 日韩欧美一区二区三区四区| 日韩高清精品免费观看| 麻豆成人入口| 色综合久久九月婷婷色综合| 九九99玖玖| 在线观看亚洲国产| 91久久午夜| av中文字幕在线不卡| 欧美激情亚洲国产| 尤物网站在线观看| 日本午夜免费一区二区| 亚洲少妇最新在线视频| 国产精品久久国产精品| 亚洲s码欧洲m码国产av| 国产精品久久久久9999赢消| 日韩网站在线看片你懂的| 免费无遮挡无码永久视频| 黄色软件在线观看| 国产福利精品一区| 国产精品第8页| 日韩精品手机在线| 欧美freesex交免费视频| 日韩精品视频免费专区在线播放| 激情 小说 亚洲 图片: 伦| 欧美黑人猛交| 韩国成人福利片在线播放| 久久久免费精品| 中国一级片在线观看| 免费精品一区二区三区在线观看| 欧美日韩国产色视频| 4444kk亚洲人成电影在线| 日本少妇久久久| 久久精品国内一区二区三区水蜜桃| 亚洲加勒比久久88色综合| 50度灰在线观看| 一级全黄少妇性色生活片| 亚洲美女少妇无套啪啪呻吟| 国产一区二区av| 国产在线观看无码免费视频| 国产又爽又黄免费软件| 欧美套图亚洲一区| 成人午夜免费视频| 久久99国产精品久久久久久久久| 国产男男chinese网站| 999精品嫩草久久久久久99| 色噜噜久久综合| 亚洲视频导航| 国产小视频在线| 99pao成人国产永久免费视频| 日韩在线小视频| 免费视频91蜜桃| 亚洲人成精品久久久 | 韩日欧美一区二区| 九九视频免费看| 午夜日韩视频| 久久人人爽人人爽人人片亚洲 | 视频在线观看免费高清| 亚洲天堂电影| 色综合色狠狠综合色| 好吊妞无缓冲视频观看| 2001个疯子在线观看| 一区二区三区四区中文字幕| 亚洲精品一区二| 日本不卡三区| 亚洲久本草在线中文字幕| 精品少妇人妻av一区二区| 日本中文在线观看| 自拍偷拍国产亚洲| 男人天堂手机在线视频| av免费在线视| 色婷婷av一区| 欧美性猛交xxxx乱大交91| 亚洲欧洲二区| 蜜芽tv福利在线视频| 日本在线观看不卡视频| 国产精品久久久久久影视| 波多野结衣视频观看| 日本免费新一区视频| 国产精品美女主播| 999久久久久| jvid福利写真一区二区三区| 成人av影视在线| 日本久久一级片| 国产无人区一区二区三区| 亚洲 国产 欧美一区| 尤物在线视频| 亚洲大片精品永久免费| 成人久久久久久久| 国产又粗又猛又爽又黄的| 国产精品一区二区久久精品爱涩| 成人xxxxx色| 黄色在线网站| 亚洲精品高清在线| 激情综合网婷婷| 超碰国产精品一区二页| 精品久久久久av影院| 亚洲精品理论片| 午夜精品视频一区二区三区在线看| 欧美成人免费大片| 日韩电影在线观看一区二区| 奇米777欧美一区二区| 亚洲最大的网站| 成年人视频在线看| 亚洲国产成人tv| 女人高潮一级片| 网曝91综合精品门事件在线| 国产亚洲视频在线观看| 国产探花在线视频| 免费亚洲网站| 国产精品二区三区四区| 国产三级在线看| 午夜视频在线观看一区二区三区 | 亚欧美中日韩视频| 3d动漫啪啪精品一区二区免费| 日韩在线免费看| 亚洲精品五月天| 国产又猛又黄的视频| 久久综合五月婷婷| 美女啪啪无遮挡免费久久网站| √资源天堂中文在线| 国产一区二区免费看| 欧美亚洲另类久久综合| 超碰中文在线| 日韩欧美国产小视频| 少妇av片在线观看| 国产精品美女久久久| 97人摸人人澡人人人超一碰| 天堂中文资源在线| 亚洲成a人v欧美综合天堂| 不卡的av中文字幕| 精品久久成人| 国产成人精品免高潮费视频| 精品女同一区二区三区| 久久精品国产一区二区| 国产盗摄xxxx视频xxx69| 性一交一乱一精一晶| 中文字幕一区二区三区乱码在线| 欧美 日韩精品| 亚洲第一二三区| 91黑丝在线观看| 午夜小视频免费| 黄网站在线免费| 91麻豆swag| 黄页免费在线观看视频| 9999在线精品视频| 日韩视频免费观看| 91美女精品网站| 中文字幕一区二区在线观看| 狠狠爱免费视频| 精品一区免费| 国产精品欧美在线| 欧美一级二级三级区| 欧美午夜电影一区| 蜜桃av免费在线观看| 日本不卡视频一二三区| 免费毛片一区二区三区久久久| 免费av不卡在线观看| 日韩你懂的在线观看| 欧美精品成人久久| 国产91精品露脸国语对白| 大陆极品少妇内射aaaaaa| 久久精品九色| 欧美激情国产日韩精品一区18| 亚洲福利在线观看视频| 亚洲午夜视频在线观看| 第四色在线视频| 久久久久久久尹人综合网亚洲| 国产精品www色诱视频| 清纯唯美亚洲色图| 欧美性生交片4| h色网站在线观看| 国产+成+人+亚洲欧洲自线| 拔插拔插海外华人免费| 日韩高清一级| 国产精品久久久91| 91蜜桃在线视频| 亚洲精品国产欧美| 中文字幕一区二区人妻| 亚洲人成小说网站色在线| 黄色一级片免费播放| 激情国产一区| 亚洲 国产 欧美一区| 日韩高清在线观看一区二区| 亚洲国产精品日韩专区av有中文 | 在线观看亚洲免费视频| 伊人成人网在线看| 日本一区二区久久精品| 日本欧美在线| 97在线视频一区| 在线观看二区| 亚洲国产第一页| 国产精品suv一区| 亚洲精品国产第一综合99久久 | 哺乳一区二区三区中文视频| 欧美极品少妇xxxxⅹ裸体艺术| 五月婷婷开心中文字幕| 欧洲精品在线观看| 国产一级在线播放| 国产精品日韩精品欧美在线| 午夜剧场高清版免费观看| 亚洲大片av| 亚洲精品中字| 偷拍精品福利视频导航| 亚洲一区二区三区在线视频 | 精人妻一区二区三区| 久久国产直播| 免费高清一区二区三区| 欧美日中文字幕| 久久天天狠狠| 国产极品模特精品一二| 国产精品日韩在线| 老色鬼在线视频| 欧美高清激情视频| 老司机在线视频二区| 精品中文字幕久久久久久| va视频在线观看| 欧美日韩不卡视频| 久久精品国产亚洲AV熟女| 久久精品国产亚洲一区二区三区| 成人午夜免费在线| 久久久久久久久久久久久久久久久久| 欧美在线3区| 日韩美女毛片| 国产精品视频入口| 日本一区二区乱| 国产一区二区在线免费| 韩日成人影院| 7m第一福利500精品视频| jizz性欧美10| 爱福利视频一区| 成年人在线观看| 中文字幕无线精品亚洲乱码一区 | 久久久精品2019中文字幕神马| 亚洲av成人无码网天堂| 日韩精品一区二区三区在线观看| 国产精品视频久| 免费不卡av| 精品中文字幕在线| 成人影院在线观看| 久久亚洲国产精品成人av秋霞| 国产一级免费在线观看| 日韩精品免费在线观看| 天堂av手机版| 亚洲一区二区三区自拍| 极品色av影院| 亚洲视频一区二区在线观看| 欧美 日韩 国产 成人 在线观看 | 一区二区视频欧美| 国产精品美女在线播放| 色一区二区三区四区| 国产欧美日韩专区发布| 亚洲成人短视频| 国产成人黄色av| 国产综合av| 国产精品一区专区欧美日韩| 欧美xxx网站| 国产精品高潮视频| 成人精品一区二区三区电影| 日韩视频第一页| 国产丝袜在线| 韩国美女主播一区| 欧美gay囗交囗交| 国产在线拍揄自揄视频不卡99| 国产一区二区三区四区五区3d| 国产精品稀缺呦系列在线| 成人在线观看免费视频| 国产乱肥老妇国产一区二 | 欧美日韩的一区二区| 国产孕妇孕交大片孕| 91精品国产色综合久久| 中文在线观看免费网站| 亚洲国产综合人成综合网站| 黄色一级片中国| 精品久久久久久久久久ntr影视| 国产黄色大片免费看| 国产一区二区自拍视频| 日韩欧美在线观看| 自拍偷拍福利视频| 欧美一卡2卡3卡4卡| 亚洲女人18毛片水真多| 天天影视网天天综合色在线播放| 日韩福利片在线观看| 色哟哟在线观看一区二区三区| 欧美高清69hd| 亚洲第一网站免费视频| 国产三级电影在线观看| 日韩中文字幕免费| 波多野结衣在线高清| 日本免费在线精品| www.欧美| 欧美一级爱爱| 欧美成人中文| 青青草av网站| 成人性生交大片免费看视频在线 | 最近2019中文字幕一页二页| av午夜在线| 久久久久久网站| 国产91精品在线| 国产精品三区四区| av伊人久久| 免费av手机在线观看| 日韩精品一级中文字幕精品视频免费观看 | 国产精品—色呦呦| 国产精品视频一| 国产乱人伦丫前精品视频| 日韩精品电影网站| 亚洲韩日在线| 99999精品| 国产人成一区二区三区影院| 91人妻一区二区三区蜜臀| 狠狠色狠狠色综合日日五| 国产人妻精品一区二区三区| 亚洲成avwww人| 好吊日视频在线观看| 成人一级片网址| 中文字幕第一页亚洲| 一本久道久久久| 9191在线视频| 国产精品一区一区| 手机看片福利视频| 精品美女永久免费视频| 99久久精品国产一区色| 亚洲人成电影在线播放| 久久五月精品中文字幕| 国产精品一区久久久| 久操精品在线| 黄色av网址在线播放| 国产福利视频一区二区三区| 九九九视频在线观看| 黑人巨大精品欧美一区二区一视频 | 国产精品一二三区在线观看| 亚洲靠逼com| 国产人妖一区二区三区| 中文字幕在线看视频国产欧美在线看完整| 手机在线观看av网站| 国产精品美女免费视频| 先锋影音国产精品| 无码中文字幕色专区| 国产成人鲁色资源国产91色综| 在线观看天堂av| 亚洲色图一区二区| 亚洲字幕av一区二区三区四区| 亚洲天堂视频在线观看| 91av亚洲| 久久久久久亚洲精品不卡4k岛国| 国产一区激情| 成人高清在线观看视频| 亚洲天堂2016| 99国产在线播放| 欧美精品一本久久男人的天堂| 国产精品1区| 久久香蕉视频网站| 成人免费视频视频| 男人天堂中文字幕| 日韩成人免费视频| 中文字幕乱码在线播放| 久久久久资源| 日韩一区精品字幕| 91免费公开视频| 精品国产一区二区三区四区四| 色www永久免费视频首页在线| 5g国产欧美日韩视频| 欧美精品午夜| 中文字幕免费高清视频| 天天爽夜夜爽夜夜爽精品视频| 香蕉久久一区二区三区| 欧美一级视频在线观看| 青青伊人久久| 正在播放亚洲| 成人午夜视频在线| 黄色片网站在线免费观看| 亚洲色图在线观看| 日韩av黄色| 成人免费在线网| 国产精品综合网| 国产一级精品视频| 在线观看久久av| 精品99re| 国产 福利 在线| 亚洲欧美在线综合| 欧美日韩成人网| 精品丝袜久久| 中文字幕 91| 亚洲电影激情视频网站| 无码国产精品一区二区免费16| 茄子视频成人在线| 亚洲欧洲美洲一区二区三区| 人妻激情偷乱视频一区二区三区| 五月婷婷激情综合网| 999在线视频| 国产日韩精品久久| 亚洲一区欧美| 人妻丰满熟妇av无码久久洗澡 | 伊人成年综合网| 久久久久国产视频| 成人看的羞羞网站| 国产高清成人久久| 欧美一区二区三区视频在线|