目錄vue
npm install -g typescript #安裝typescript 工具tsc編譯器 tsc a.ts #輸出 a.js node a.js #運行js
typescript 經過tsconfig.json 文件配置。node
可經過gulp 等工具管理項目自動化編譯和運行。typescript
boolean 布爾、number 數字、string 字符串、enum 枚舉、any 任意、void 空、null 空值、 undefined 未定義、symbol 符號值、object 對象、never 不存在。數據庫
let isDone:boolean = false; let name:string = "普通字符串"; let firstName:string = `模板字符串${isDone}`; //支持插入和換行 enum Color{Red=0,Green=2,Blue=4} let c:Color = Color.Green; let notSure:any = 4; notSure = "字符串也行"; let voidValue:void = undefined;//只有undefined或null兩個值。 let u:undefined = undefined; let n:null = null; let sym:symbol = Symbol(); //惟一存在,可用做對象成員的鍵 let o:object = {};//除boolean、number、string、symbol、null、undefined外的類型 ():never=>{throw "";}; //用來定義沒有返回路徑的方法。該類型是全部類型的子類型。
注意:npm
[] 數組json
let list:number[] = [1,2,3]; let genList:Array<number>=[1,2,3]; //泛型數組
let x:[string,number] = ['hello',10];
"s"|"n"|"m"
用豎線分隔的字面量限定字符串變量的可選值。1|2|3|4
數字變量的可選值。接口作類型的聲明,而沒有具體實現。gulp
interface 接口名 extends 可選的父接口{ color?:string; //可選屬性 width:number; readonly x:number;//只讀屬性 [propName:string]:any; //索引屬性,如s["name"],其餘屬性類型必須兼容索引屬性 [index:number]:any; //數字下標作索引,s[1] 等價 s["1"] (start:number):string; //實例成員函數 new():object; //初始化構造函數 }
類類型能夠實現接口。類分兩部分,靜態部分和實例部分,類構造函數屬於靜態部分,而接口實現屬於實例部分。數組
interface face{ data:string; } class Ca implements face{ data:string; //實現接口 //初始化構造函數 constructor(h:number,m:number){ this.data = h + m; } private state:any;//私有屬性 } //接口能夠繼承自類,包含類的相關聲明,包括私有。所以,通常只有父類的子類才能實現該接口。 interface ia extends Ca{ new(state:any):face{} }
extends
繼承基類implements
實現接口super()
調用基類初始化this
實例對象public/protected/private
訪問權限。只有public成員才具備結構性兼容的便利readonly
只讀屬性constructor()
構造函數constructor(public a:number, readonly b:string)
參數屬性。具備特殊修飾符的a,b自動成爲對象成員get set
存儲器。讀取屬性的函數static
靜態屬性。類屬性abstract
抽象類,抽象成員函數let myfun:(a:number,b:string)=>boolean; //函數類型 function fun2(a:number,b:string):boolean{} //函數 let fun3=function(){};//匿名函數 let fun4=()=>1;//箭頭函數
function myfun(arg?:number):void{} //?表明可選 let fun2=(name="bill")=>void;//默認參數 function fun3(a:number, ...s:number[]){} //s是剩餘參數
function f(this:void){} //禁用this class A{ f1():this{return this;} } class B extends A{ f2():this{return this;} } let a:B = new B(); a.f1().f2(); //f1返回的this自動成爲子類型
for..of
語句調用對象上的迭代器Symbol.iterator
函數。for..in
語句迭代對象的鍵,適用任何對象//變量聲明 let 變量名:可選的類型 = [1,2]; //字面量 //常量聲明,即不能修改的變量 let 常量名:可選的類型 = [1,2]; //解構數組 let [a, b]:可選的類型 = [1,2]; //a=1,b=2 let [a, ...b] = [1,2,3,4]; //a=1,b=[2,3,4] //解構對象 let {a,b} = {a:1,b:2,c:3};//a=1,b=2 let {a:newA,c}={a:1,b:2,c:3};//newA=1,c=3;屬性名a修改爲newA //展開數組 let a:number[] = [0,...[1,2],3];//a=[0,1,2,3];展開數組[1,2] //類型斷言,繞過某些編譯器類型檢查 let a:string= 1 as string;
用標記來代替特定類型,或者替代類型的一部分。
<T>
bash
指定泛型標誌的適用範圍。函數
let f:<T extends interFace>(arg:T)=>T;
U & T
合併U和T兩類型成員U | T
U,T的聯合體,值爲其中之一,成員爲共有的相同成員keyof
索引類型查詢,獲得公共屬性名的聯合T[K]
其中,K extends keyof T
,即K是聯合類型其中一個。結果是T.K[key in keyof T]:P
迭代T的屬性聯合,產生對應的對象屬性,並設置類型爲P。預約義映射:
Exclude<T,U>
剔除UExtract<T,U>
提取UNonNullable<T>
剔除null和undefined。ReturnType<T>
獲取函數返回類型InstanceType<T>
獲取構造函數實例類型。Readonly<T>
映射爲只讀版本Partianl<T>
可選版本Pick<T,K>
摘錄版本Record<string,R>
將聯合映射爲對象,成員類型Rts中使用告終構做爲類型兼容的標準,也就是隻要結構相容,就是相容,而不須要明確的類型命名聲明。
結構包含:
相容的意思是指:
let a:A = b as B;//A兼容B
//複雜例子 let a:{x:number,y(a1:{k:1,k2:2}, a2:never):{r:number}}= {x:1, y: (m:{k:1})=>{return {r:1};}}
():is 類型
類型推斷謂詞typeof
instanceof
| ||
可null聯合類型相關符號? undefined
可選類型相關符號type
別名模塊加載器 CommonjS(node.js) 或 Require.js(AMD); UMD,SystemJS,ES6/ES2015。
export
標識要導出的內容。import
導入。export default
默認導出,導入時能夠不指定對應的名字export =
commonjs語法import module=require(」module「)
commonjs語法declare
ts聲明格式declare module
ts聲明模塊namespace
命名空間import x= ns.cla
x是別名@裝飾器
是一個函數,會在被裝飾的對象運行時調用。reflect-metadata
是元數據庫。
return class extends {new(...args:any[]):{}}{}