typescript基礎總結(jié)

【Typescript】基礎知識小總結(jié)

2020-02-16 09:54:37

標簽:it

? ? 最近磕TS呐矾,不磕不知道,ts包括了很多js的基礎知識點,然后結(jié)合es6宵统,有了更多的完善的的地方,對開發(fā)環(huán)境更加的友好覆获。我將我學習到的新知識點马澈,和涉及的老知識點做一個總結(jié)瓢省。

一、類型

? ? 最特別的第一個總結(jié)痊班,與js不一樣的是勤婚,ts有了類型注解,也就是說涤伐,每一個對象馒胆、數(shù)組、函數(shù)都可以定義類型注解凝果。

? ? 在編譯器中實驗可以得知祝迂,類型注解不是強制的,但是編譯器可以根據(jù)你的賦值豆村,推斷出你定義的變量應該賦什么值液兽。這也叫類型推斷。在編譯的時候掌动,如果沒有定義類型注解四啰,應該多查看編譯器推斷的注解是不是需要的,不然可能會有隱藏的雷粗恢。

? ? 類型注解可以分為兩類:


? ? 對于基礎類型的類型注解的示例:

? ?const a:string = 'hello'

? ? 在此只說在程序里如何定義柑晒,每一個的詳細意思在平時編程里或多或少能遇到,或者在網(wǎng)上也有更詳細的總結(jié)眷射。在這里想特別提一下any匙赞,它比較特別,可以有兩個用處妖碉,一是不知道怎么定義的時候可以用any先暫時定義涌庭,或者類型推斷,如果類型推斷不正確也喜歡推斷成any欧宜,這里需要注意一下坐榆。在學習的時候,過來人的建議冗茸,由于any用的太過頻繁席镀,甚至有人直接稱typescript為anyscript,失去了用它的初衷夏漱。

? ? 下面一個一個寫對象類型的示例:

1豪诲、函數(shù)

基礎寫法:

const function = (str:string) => {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?return parseInt(str,10)

}

注:此處未注明function的類型,是因為編譯器會自動推斷為number

函數(shù)中多個對象定義類型的寫法:

function getNum({fir,sec}:{fir:number,sec:number}){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return fir,sec

}

或者

function getNum:({fir,sec}:{fir:number,sec:number}) =>number = (fir,sec) =>{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?return fir,sec

}

注:傳入值如果是實現(xiàn)定義好的不會強制檢測

2挂绰、數(shù)組

基礎寫法:const arr:number[] =[1,2,3]

定義類型不唯一的寫法: const arr:(number | string)[] = [1,'hello',2]

定義的類型是一個對象:const arr:{ name: string} [] =[{ name:'json' },{ name: 'dora'}] //注意此處是定義的每一個對象都有一個name屎篱,值的屬性是string的意思,在對象中就不存在其他類型的對象了。

如果類型定義太長交播,也可以寫一個類型別名专肪,之后再引用:

type test = { name : string , age : number }

const arr:test[] = [{name:'json',age:22},{name:'dora',age:25}]

如果想定義數(shù)組中每一個元素的屬性,可以用元組堪侯,例如:

const arr:[string,number,string,number] = ['hello',1,'world',2]

3嚎尤、interface接口

? ? 和類型別名相似,interface可以集中定義屬性伍宦,但是和類型定義的區(qū)別在于芽死,作用的對象有不同,interface可以作用于函數(shù)次洼、對象关贵、類。

? ? interface可以定義屬性卖毁,也可以在其中定義方法揖曾。下面是示例代碼:

interface Count {

? ?name:string;

? ?age:number;

? count():void

}

? ? 在interface中也可以單獨定義屬性,常用的是readonly只讀屬性亥啦,它和const都具有只讀屬性炭剪,區(qū)別是const作用于變量,readonly作用屬性翔脱;'?'可有可無的屬性奴拦,也就是說該元素的有無不強求;[propName:string]:any 可接受其他字符串的屬性届吁,下面是統(tǒng)一的示例代碼:

interface Count {

? readonly name:string;

? ?age?:number;

? count():void;

[propName:string]:any

}

? ? interface定義的類错妖,示例代碼如下(interface定義沿用上文的):

?class CountNum?implements?Count{

...

? ? interface接口也可以繼承,示例代碼如下:

interface Count1?extends?Count {

sex:string?

}

注:Count1為子接口 Count為父接口

? ? interface可定義函數(shù)疚沐,代碼示例如下:

interface Num {

(fir:number,sec:number):number

}

function add:Num=(first:1,sec:2) =>{

...

}

二暂氯、類

? ? 類可以將屬性、方法放在一起亮蛔,在es6的時候痴施,將這個定義提了出來,它是一個面向?qū)ο蟮暮瘮?shù)尔邓,可以繼承晾剖,可以被重寫等锉矢。在我看來梯嗽,類不止是一個語法糖,它使得js的應用范圍變得更加的廣泛和具有更多的可能性沽损。

? ? 基礎定義:

class xx {

name='hello';

say(){

return this.name

}

}

注:xx為類的名字


1灯节、類實例化

? ? 使用類的內(nèi)容之前都需要先實例化,如下例:

const person = new xx();

2、類的繼承

1炎疆、extends:

class xxx extends xx {

...? ?//定義新方法卡骂、屬性

}

注:1、xxx為子類名形入,xx為父類名

? ? ? 2全跨、子類里如果有和父類重名的方法,父類相同的方法會被重寫

2亿遂、super:

class xxx extends xx{

say(){

? return?super.getname() + ' hello '

}

}

super既繼承了父元素浓若,又不會被重寫。

3蛇数、類的類型

private:允許在類的內(nèi)部調(diào)用

protected:允許在類內(nèi)及繼承的子類中使用

public :允許在類的內(nèi)挪钓、外被調(diào)用

4、關(guān)于static

1靜態(tài)方法耳舅,不會被實例繼承碌上,只能通過類的調(diào)用

2在一個靜態(tài)方法中同一個類中有其他靜態(tài)方法可以通過this調(diào)用

3非靜態(tài)方法中,不能直接通過this調(diào)用浦徊,而是通過類名調(diào)用:CLASSNAME.STATIC_METHOD_NAME()或用構(gòu)造器中的屬性:this.constructor.STATIC.METHOD_NAME()調(diào)用

4不能被實例繼承馏予,可以被子類繼承

5、constructor

? ? 在類實例化的瞬間盔性,constructor會自動執(zhí)行吗蚌,作為類的構(gòu)造器,如果實例未定義constructor纯出,實例化后默認函數(shù)中有可空的constructor蚯妇。constructor方法默認返回實例對象,即this暂筝。也可以返回其他對象箩言。

? ? 子類的constructor中,需要super父類的constructor焕襟,即使父類的constructor為空陨收,子類的super()也需要寫。

6鸵赖、getter和setter

? ? 在私有類中务漩,可以通過getter和setter得到和設置數(shù)據(jù):

class Person{

constructor( readonly _name:string) {

?get name(){

? return this. _name +'world'

}

set name(name:string) {

? ? const realname = name.split(' ')[1];

? ? this._name = realname;

}

}

}

const person = new Person('hello');

//輸出 ‘hello world’

person.name = 'dora';

//輸出‘dora world’

7、抽象類

? ? 可定義屬性它褪,方法饵骨,無需賦值,不能實例化茫打,只能被繼承居触,需注意妖混,定義的抽象方法,在子類需要被實現(xiàn)轮洋。大致寫法如下:

abstract class XX{

abstract say():string

width:number

....

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末制市,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弊予,更是在濱河造成了極大的恐慌祥楣,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汉柒,死亡現(xiàn)場離奇詭異荣堰,居然都是意外死亡竭翠,警方通過查閱死者的電腦和手機振坚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斋扰,“玉大人渡八,你說我怎么就攤上這事〈酰” “怎么了屎鳍?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長问裕。 經(jīng)常有香客問我逮壁,道長,這世上最難降的妖魔是什么粮宛? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任窥淆,我火速辦了婚禮,結(jié)果婚禮上巍杈,老公的妹妹穿的比我還像新娘忧饭。我一直安慰自己,他們只是感情好筷畦,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布词裤。 她就那樣靜靜地躺著,像睡著了一般鳖宾。 火紅的嫁衣襯著肌膚如雪吼砂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天鼎文,我揣著相機與錄音渔肩,去河邊找鬼。 笑死漂问,一個胖子當著我的面吹牛赖瞒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚤假,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼栏饮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了磷仰?” 一聲冷哼從身側(cè)響起袍嬉,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灶平,沒想到半個月后伺通,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡逢享,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年罐监,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞒爬。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡弓柱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出侧但,到底是詐尸還是另有隱情矢空,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布禀横,位于F島的核電站屁药,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏柏锄。R本人自食惡果不足惜酿箭,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趾娃。 院中可真熱鬧七问,春花似錦、人聲如沸茫舶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饶氏。三九已至讥耗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疹启,已是汗流浹背古程。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喊崖,地道東北人挣磨。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓雇逞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親茁裙。 傳聞我的和親對象是個殘疾皇子塘砸,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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