目录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[]):{}}{}