此文为 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定义好的类型
详情参考内置对象
未完待续...