TypeScript

1.基礎(chǔ)類型:

  • boolean
  • number
  • string
  • 數(shù)組:number[ ]/數(shù)據(jù)泛型方式 Array<number>
  • 元組tuple:數(shù)組的一種,用來表示一個已知元素數(shù)量和類型的數(shù)組;let arr:[number , string] = [10 , 'test' ]
  • 枚舉enum:從0開始為元素編號。也可以手動的指定成員的數(shù)值,數(shù)值會遞增??梢杂擅杜e的值得到它的名字,也可以由名字得到相應(yīng)的值
enum Color {
  Red,
  Blue,
}
let b: string;
let a: number;
a = Color.Red; // 0
b = Color[0]; // 'Red'
  • any
  • void:表示沒有任何類型
  • null / undefined:默認(rèn)情況下是所有類型的子類型,當(dāng)指定了--strictNullChecks標(biāo)記,null和undefined只能賦值給void和它們各自
  • never:永不存在的值的類型
  • object:非原始類型,即除number,stringbooleansymbol,null或undefined之外的類型

2.接口類型interface

可以用來描述一個對象或者函數(shù)

interface Config {
    width: number;
    color?: string; // 可選屬性
    readonly id: string; // 只讀屬性
    childs: ReadonlyArray<number>; // ts具有ReadonlyArray<T>類型,與Array<T>相似,只是把所有可變方法去掉了
    [propName: string]: any; // 任意屬性,任意數(shù)量的其它屬性
}

interface Fun {
    (name:string, age:number): void
}

接口繼承(擴展):extends

interface Shape {
    color: string;
}

interface PenStroke {
    penWidth: number;
}

interface Square extends Shape, PenStroke { // 可以一次繼承多個
    sideLength: number;
}

let square = <Square>{}; // 斷言
square.color = "blue";
square.sideLength = 10;
square.penWidth = 5.0;

4.函數(shù)類型

函數(shù)類型包含兩部分:參數(shù)類型和返回值類型。 當(dāng)寫出完整函數(shù)類型的時候,這兩部分都是需要的。

// 將輸入輸出類型分別指定,為函數(shù)定義類型
let myAdd = function(x: number, y: number): number { return x + y; };

// 將函數(shù)整體定義指向函數(shù)變量,即書寫完整函數(shù)類型
let myAdd: (baseValue: number, increment: number) => number = function(x, y) { return x + y; };
// 將函數(shù)以接口形式定義指向給函數(shù)變量,函數(shù)接口類型
let myAdd: {(baseValue: number, increment: number):number} = function(x, y) { return x + y; };

只要參數(shù)類型是匹配的,那么就認(rèn)為它是有效的函數(shù)類型,而不在乎參數(shù)名是否正確

5.泛型:

泛型就是指在定義函數(shù)、接口或者類的時候不預(yù)先指定具體的類型,而在使用的時候在指定類型的一種特性
泛型在函數(shù)中的應(yīng)用:

// 將輸入輸出類型分別指定
function test1<T>(arg:T[ ]):T[ ]{ return arg; }
const test2 = <P>(arg:P):P=> arg;

// 定義函數(shù)整體類型的方式
const test3:<U>(val:U)=>U = val => val;

// 接口定義函數(shù)的形式
const test4: { <T>(val:T): T} = val => val;

在接口中的應(yīng)用:

interface Props<T> {
  dataSource: T[];
}

在類型別名中的應(yīng)用:

type Props<T> = {
  dataSource: T[];
}

6.高級類型

  • 聯(lián)合類型:type C = A | B; C滿足A或者滿足B(聯(lián)合類型表示一個值可以是幾種類型之一,對象聯(lián)合類型只能訪問聯(lián)合中所有共同成員)
  • 交叉類型:type C = A & B; C即滿足A又滿足B(交叉類型是將多個類型合并為一個類型,對象交叉類型能訪問聯(lián)合中所有成員)
  • 類型別名type:和接口很像,也可以用來描述對象或者函數(shù),但是可以作用于原始值,聯(lián)合類型,元組以及其它任何你需要手寫的類型
type Name = string;
type Config<T> =  {
    width: number;
    color?: string; // 可選屬性
    other?: T; // 可以是泛型
}

type Fun = (name:string, age:number): void

類型別名不能被 extendsimplements(自己也不能 extendsimplements其它類型)
無法通過接口來描述一個類型并且需要使用聯(lián)合類型或元組類型,這時通常會使用類型別名。

  • 索引類型 keyof / T[K]
function pluck<T, K extends keyof T>(o: T, names: K[]): T[K][] {
  return names.map(n => o[n]);
}

interface Person {
    name: string;
    age: number;
}
let person: Person = {
    name: 'Jarid',
    age: 35
};
let strings: string[] = pluck(person, ['name']); // ok, string[]---> ['Jarid']

keyof T 索引類型查詢操作符,其的結(jié)果為 T上已知的公共屬性名的聯(lián)合
T[K] 索引類型訪問操作符

  • 映射類型 in
type Keys = 'option1' | 'option2';
type Flags = { [K in Keys]: boolean };
// Partial是ts內(nèi)置的工具類型,源碼如下:
type Partial<T> = { [P in keyof T]?: T[P] }
// 作用:生成一個新類型,該類型與 T 擁有相同的屬性,但是所有屬性皆為可選項
interface Foo {
    name: string
    age: number
}
type Bar = Partial<Foo>

ts庫里還有其他的一些工具類型,如Readonly / Pick / Record / Exclude/ Extract...

  • 類型斷言:<類型>值 / 值 as 類型()

模塊

TypeScript與ECMAScript 2015一樣,任何包含頂級import或者export的文件都被當(dāng)成一個模塊。相反地,如果一個文件不帶有頂級的import或者export聲明,那么它的內(nèi)容被視為全局可見的(因此對模塊也是可見的)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,604評論 2 380

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