去年學過一段時間的TS,但因爲在工做中不經常使用。就生疏了,最近項目要求用TS,那我就再回去搞搞TS,寫一篇記錄一下本身學習TS的進度以及TS知識點git
首先,關於TS的定義我就不在這描述了,想看百度一下你就知道,咱們直接來看怎麼用就完事了github
安裝:typescript
npm install -g typescript
這個命令要是一直下載不下來,請使用yarn試試,或者將源指向淘寶,用cnpm都同樣npm
以上命令會在全局環境下安裝 tsc
命令,安裝完成以後,咱們就能夠在任何地方執行 tsc
命令了。json
編譯一個 TypeScript 文件:函數
tsc hello.ts
咱們約定使用 TypeScript 編寫的文件以 .ts
爲後綴,用 TypeScript 編寫 React 時,以 .tsx
爲後綴。學習
檢查:spa
TypeScript 只會進行靜態檢查,若是發現有錯誤,編譯的時候就會報錯。但即便報錯,相應的JS文件仍是被編譯出來code
若是要在報錯的時候終止 js 文件的生成,能夠在 tsconfig.json
中配置 noEmitOnError
便可對象
TS基礎:
原始數據類型,跟JS如出一轍,沒啥變化,只不過使用的用法變了
來,給看官們展現展現
布爾值:
let isDone:boolean = false
能夠看到咱們在變量名後面加了一個:boolean來標識idDone這個變量類型是布爾類型,
注意:
使用new Boolean()
返回的是一個 Boolean
對象,而不是boolean類型
可是直接調用 Boolean
能夠返回一個 boolean
類型
數值:
使用number裏定義數值類型
let decLiteral: number = 6; let hexLiteral: number = 0xf00d; // ES6 中的二進制表示法 let binaryLiteral: number = 0b1010; // ES6 中的八進制表示法 let octalLiteral: number = 0o744; let notANumber: number = NaN; let infinityNumber: number = Infinity;
編譯結果:
var decLiteral = 6; var hexLiteral = 0xf00d; // ES6 中的二進制表示法 var binaryLiteral = 10; // ES6 中的八進制表示法 var octalLiteral = 484; var notANumber = NaN; var infinityNumber = Infinity;
注意:TS裏面寫六進制,八進制會被編譯成十進制
使用 string
定義字符串類型:
let myName: string = 'Tom';
空值:
js裏面沒有空值void的概念,在ts裏能夠用 void
表示沒有任何返回值的函數:
function alertName(): void { alert('My name is Tom'); }
在 TypeScript 中,可使用 null
和 undefined
來定義這兩個原始數據類型:
let u: undefined = undefined; let n: null = null;
注意:undefined
類型的變量只能被賦值爲 undefined
,null
類型的變量只能被賦值爲 null
。
與 void
的區別是,undefined
和 null
是全部類型的子類型。也就是說 undefined
類型的變量,能夠賦值給 number
類型的變量:
// 這樣不會報錯 let num: number = undefined;
// 這樣也不會報錯 let u: undefined; let num: number = u;
而 void
類型的變量不能賦值給 number
類型的變量:
let u: void; let num: number = u; // index.ts(2,5): error TS2322: Type 'void' is not assignable to type 'number'.
Any:
any容許賦值爲任意類型,若是是一個普通類型,在賦值過程當中改變類型是不被容許的:
let myFavoriteNumber: string = 'seven'; myFavoriteNumber = 7; // index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.
但若是是 any
類型,則容許被賦值爲任意類型。
let myFavoriteNumber: any = 'seven'; myFavoriteNumber = 7;
在任意值上訪問任何屬性都是容許的:
let anyThing: any = 'hello'; console.log(anyThing.myName); console.log(anyThing.myName.firstName);
let anyThing: any = 'Tom'; anyThing.setName('Jerry'); anyThing.setName('Jerry').sayHello(); anyThing.myName.setFirstName('Cat');
能夠認爲,聲明一個變量爲任意值以後,對它的任何操做,返回的內容的類型都是任意值。
變量若是在聲明的時候,未指定其類型,那麼它會被識別爲任意值類型:
let something; something = 'seven'; something = 7;
等同於:
let something: any; something = 'seven'; something = 7;
原文參考自:https://github.com/xcatliu/typescript-tutorial/blob/master/basics/union-types.md