TypeScript基礎(chǔ)語法 - interface 接口(二)

TypeScript 中的 interface 接口
  • Interface接口初步了解

現(xiàn)在我們要作一個(gè)簡歷的自動(dòng)篩選程序闷尿,

const screenResume = (name: string, age: number, height: number) => {
  age < 60 && height >= 160 && console.log(name + "進(jìn)入面試");
};

screenResume("張三", 18, 180);

這時(shí)候老板又增加了需求,說我必須能看到這些簡歷胆绊。于是你又寫了這樣一個(gè)方法。

const getResume = (name: string, age: number, height: number) => {
  console.log(name + "年齡是:" + age);
  console.log(name + "身高是:" + height);
};
getResume("張三", 18, 180);

這時(shí)候問題來了,程序開發(fā)中一直強(qiáng)調(diào)“代碼重用”捌斧,兩個(gè)方法用的類型注解一樣笛质,需要作個(gè)統(tǒng)一的約束泉沾。上節(jié)課一個(gè)類型別名的知識可以解決代碼重復(fù)的問題,這節(jié)課我們就用一個(gè)更常用的語法接口(Interface).

我們可以把這兩個(gè)重復(fù)的類型注解妇押,定義成統(tǒng)一的接口跷究。代碼如下:

interface Girl {
  name: string;
  age: number;
  height: number;
}

有了接口后,我們的程序也要作一些修改敲霍,需要寫成下面的樣子俊马。這樣就更像是面向?qū)ο缶幊塘恕?/p>

const screenResume = (girl: Girl) => {
  girl.age < 60 && girl.height >= 160 && console.log(girl.name + "進(jìn)入面試");
};

const getResume = (girl: Girl) => {
  console.log(girl.name + "年齡是:" + girl.age);
  console.log(girl.name + "身高是:" + girl.height);
};
const girl = {
  name: "大張三",
  age: 18,
  height: 170,
};

screenResume(girl);
getResume(girl);
  • 接口和類型別名的區(qū)別

現(xiàn)在我們學(xué)了接口,也學(xué)過了類型別名肩杈,這兩個(gè)語法和用處好像一樣柴我,

類型別名可以直接給類型,比如string扩然,而接口必須代表對象艘儒。

比如我們的類型別名可以寫出下面的代碼:

type Girl1 = stirng;

但是接口就不能這樣寫,它必須代表的是一個(gè)對象,也就是說界睁,你初始化girl的時(shí)候觉增,必須寫出下面的形式.

const girl = {
  name: "張三",
  age: 18,
  height: 180,
};
  • 接口非必選值得定義

這時(shí)候老板又有了新的要求,要求盡量能看到體重翻斟,但是不作強(qiáng)制要求逾礁,就是可選值嗎。那接口如何定義那访惜?其實(shí)typeScript已經(jīng)為我們準(zhǔn)備好了相應(yīng)的辦法嘹履,就是在:號前加一個(gè)?

interface Girl {
  name: string;
  age: number;
  height: number;
  weight?: number;
}

然后我們再修改一下getResume方法,寫成這樣债热。

const getResume = (girl: Girl) => {
  console.log(girl.name + "年齡是:" + girl.age);
  console.log(girl.name + "身高是:" + girl.height);
  girl.weight && console.log(girl.name + "體重是:" + girl.weight);
};
  • 允許加入任意值
    簡歷一般是有自由發(fā)揮的空間的植捎,所以這時(shí)候需要一些任意值,就是自己愿意寫什么就寫什么阳柔。這時(shí)候interface接口也是支持的焰枢。
interface Girl {
  name: string;
  age: number;
  height: number;
  weight?: number;
  [propname: string]: any;
}

這個(gè)的意思是,屬性的名字是字符串類型舌剂,屬性的值可以是任何類型济锄。

這時(shí)候我們在對象里給一個(gè)性別,代碼如下:

const girl = {
  name: "張三",
  age: 18,
  height: 170,
  weight: 50,
  sex: "女",
};

再修改一下代碼,這首就沒有錯(cuò)誤了霍转。

const getResume = (girl: Girl) => {
  console.log(girl.name + "年齡是:" + girl.age);
  console.log(girl.name + "身高是:" + girl.height);
  girl.weight && console.log(girl.name + "體重是:" + girl.weight);
  girl.sex && console.log(girl.name + "性別是:" + girl.sex);
};

這時(shí)候我們的程序是不報(bào)錯(cuò)的荐绝,但是如果我們?nèi)サ魟偛诺脑O(shè)置,就會(huì)報(bào)錯(cuò)避消。

[propname:string]:any;  //去掉

  • 接口里的方法

接口里不僅可以存屬性低滩,還可以存方法,比如這時(shí)候有個(gè)say()方法岩喷,返回值是string類型恕沫。這時(shí)候你就不要再想成簡歷了,你需要更面向?qū)ο蠡木幊躺匆猓胂蟪梢粋€(gè)人婶溯。

interface Girl {
  name: string;
  age: number;
  height: number;
  weight?: number;
  [propname: string]: any;
  say(): string;
}

加上這個(gè)say()方法后,程序馬上就會(huì)報(bào)錯(cuò)偷霉,因?yàn)槲覀儗ο罄餂]有 say方法迄委。那我們就要給對象一個(gè) say 方法

const girl = {
  name: "張三",
  age: 18,
  height: 170,
  weight: 50,
  sex: "女",
  say() {
    return "hello!类少!";
  },
};
  • 接口和類的約束

我們都知道 JavaScriptES6里是有類這個(gè)概念的叙身,類可以和接口很好的結(jié)合,我們先來看一個(gè)例子硫狞。下面的

class XiaoJieJie implements Girl {}

這時(shí)候類會(huì)直接報(bào)錯(cuò)信轿,所以我們需要把這個(gè)類寫的完全點(diǎn)赞警。

class XiaoJieJie implements Girl {
  name = "張三";
  age = 18;
  height = 170;
  say() {
    return "hello!虏两!";
  }
}
  • 接口間的繼承
    接口也可以用于繼承的愧旦,比如你新寫一個(gè)Teacher接口,繼承于Person接口定罢。
interface Teacher extends Girl {
  teach(): string;
}

比如這時(shí)候老板說了笤虫,只看 Teacher 級別的簡歷,那我們需要修改getResume()方法祖凫。

const getResume = (girl: Teacher) => {
  console.log(girl.name + "年齡是:" + girl.age);
  console.log(girl.name + "身高是:" + girl.height);
  girl.weight && console.log(girl.name + "體重是:" + girl.weight);
  girl.sex && console.log(girl.name + "性別是:" + girl.sex);
};

修改后琼蚯,你就會(huì)發(fā)現(xiàn)下面我們調(diào)用getResume()方法的地方報(bào)錯(cuò)了,因?yàn)檫@時(shí)候傳的值必須有Teach方法,修改girle對象惠况,增加teach()方法遭庶,這時(shí)候就不會(huì)報(bào)錯(cuò)了。

const girl = {
  name: "zhangsan",
  age: 18,
  height: number;
  weight?: number;
  sex: "女",
  say() {
    return "hello3硗馈峦睡!";
  },
  teach() {
    return "hello";
  },
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市权埠,隨后出現(xiàn)的幾起案子榨了,更是在濱河造成了極大的恐慌,老刑警劉巖攘蔽,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件龙屉,死亡現(xiàn)場離奇詭異,居然都是意外死亡满俗,警方通過查閱死者的電腦和手機(jī)转捕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唆垃,“玉大人五芝,你說我怎么就攤上這事〗淀铮” “怎么了与柑?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵谤辜,是天一觀的道長。 經(jīng)常有香客問我,道長周拐,這世上最難降的妖魔是什么浪规? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮脯倚,結(jié)果婚禮上渔彰,老公的妹妹穿的比我還像新娘嵌屎。我一直安慰自己,他們只是感情好恍涂,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布宝惰。 她就那樣靜靜地躺著,像睡著了一般再沧。 火紅的嫁衣襯著肌膚如雪尼夺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天炒瘸,我揣著相機(jī)與錄音淤堵,去河邊找鬼。 笑死顷扩,一個(gè)胖子當(dāng)著我的面吹牛拐邪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隘截,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼扎阶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了婶芭?” 一聲冷哼從身側(cè)響起乘陪,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雕擂,沒想到半個(gè)月后啡邑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡井赌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年谤逼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仇穗。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡流部,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纹坐,到底是詐尸還是另有隱情枝冀,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布耘子,位于F島的核電站果漾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谷誓。R本人自食惡果不足惜绒障,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捍歪。 院中可真熱鬧户辱,春花似錦鸵钝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至必逆,卻和暖如春痕届,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背末患。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工研叫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人璧针。 一個(gè)月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓嚷炉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親探橱。 傳聞我的和親對象是個(gè)殘疾皇子申屹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容