此文爲 https://ts.xcatliu.com/ TypeScript入門教程的讀書筆記
概念:
ts是js的超集。.js直接命名爲.ts便可。vue
優勢:
1.根據定義的類型可使人很快明白如何使用;非顯示定義類型能夠作出類型推論es6
2.編譯時便可發現不少錯誤(但即便編譯報錯也能夠生成js文件)typescript
3.兼容不少第三方庫,支持es6規範,社區活躍npm
缺點:
1.須要學習新的類型概念如接口Interface,泛型Generic,類Classes,枚舉類型Enums數組
2.集成到構建須要工做量函數
3.和某些庫結合不夠完美如vue學習
安裝
安裝 npm install -g typescriptcode
編譯 tsc xx.ts對象
知識要點:
1.以 變量:類型 這種寫法指定變量類型,:先後有無空格均可以教程
如:let aaa :number = 1;
2.原始數據類型6種:
①boolean布爾值
( 注意:let b = new Boolean(),b不是一個布爾值,是一個對象)
②number數值
③string字符串
④null
⑤undefined
(注意:在ts中,null和undefined能夠被賦值到其餘類型去,如let bbb:number = undefined
⑥symbol
(es6中出現,爲一個不可能與其餘相同的值,惟一存在)
⑦void空值
(js中沒有空值的概念;ts中用void表示沒有任何返回值的函數,如
let sayHi() : void {
alert('hello~');
}
)
三、ts的類型之任意值Any
// ts是一種強類型語言,已指定其餘類型的變量不能賦值其餘類型的值
// 當定義爲Any類型時,則能夠隨意賦值不一樣類型的值
聲明一個變量爲任意值後,訪問任何屬性和調用任何方法都不報錯,返回的內容的類型都是Any
聲明變量未指定類型時,該變量默認爲Any類型
四、ts的類型推論
當聲明變量時未指定類型但賦值了,則會根據值的類型推測出一個類型做爲該變量的類型,後面如有不一樣類型的賦值則會報錯;
若聲明變量時未指定類型也未賦值,則推論爲Any類型
五、聯合類型
let ddd :string | number;
當聯合類型變量未被賦值時,不知道其確切類型,則只能訪問共有屬性
如ddd.length報錯,ddd.toString()不報錯
聯合類型會以最近一次賦值進行類型推論,推出類型後若訪問另外一個類型的屬性會報錯,只有從新賦值成另外一個類型時訪問其屬性才正確編譯
六、接口類型(對象)
在ts中,用接口Interfaces來定義對象類型
//它是對行爲的抽象,而具體如何行動由類classes去實現implement
//除了用於對類的一部分行爲進行抽象,也能夠用於對 (對象的形狀shape)進行描述
定義接口
interface Person = {
name:string, age: number
}
聲明變量
let jack:Person = {
name: 'jack', age: 18
}
聲明的變量必須和接口徹底一致,不能多,不能少,不能不同。
但還有:可選屬性、任意屬性、只讀屬性
①可選屬性如定義時這麼寫: age?: number 那麼聲明變量時age無關緊要都不報錯
②任意屬性:定義時[ propName : string] : any 那麼聲明變量時能夠增長string類型的key和任意類型的value
注意:一旦有了任意屬性,那麼該接口的其餘屬性(包括肯定屬性和可選屬性)都必須是任意屬性的值的類型 如定義了一個[propName: string] : string 屬性,那麼該接口的其餘屬性的值都必須是string,即使是某屬性age定義的爲number,在聲明變量時age賦值爲18則會報錯
③只讀屬性:定義接口時在屬性key前加上readonly。必須在聲明變量時賦值,以後給只讀屬性賦值引起報錯。
七、數組類型
①【類型+[]】表示法
let list:number[] = [1,2,3,4]
let cate: string[] = ['1','2','3','4']
②接口表示法
interface Array = {
[index:number]:number
}
let list : Array = [1,2,3,4]
③數組泛型表示法
詳見後期泛型
④類數組表示法(誤
//類數組不是數組類型,要用接口的方式來描述
如IArguments,Nodelist,HTMLCollection等,以上均爲ts定義好的類型
詳情參考內置對象
未完待續...