typescript学习
0.前言
(1)安装:cmd下输入npm install -g typescript(npm报错是因为没有安装node.js,自行百度安装即可)
安装成功后输入tsc有返回信息即为安装成功
(2)使用:基础语法和js相同,只不过在类型上做了严格规范
(3)理解:可以说和我们学的高级编程语言息息相关,例如java、python等,假如你学过相关语言,学习ts是一件很轻松的事,如果没有学过也没有关系,这段知识并不难。
1.具体使用
(1)静态数据类型
在js中我们定义数据类型时是没有规定数据类型的 例如 var/let/const a = 1,但在ts中我们就可以对生成的数据的类型进行定义
示例如下:
const count : number = 666;
const myName : string = '你好';
// nuLl , undefinde , booLean, void , symboL这些基本数据类型都可以
const girl:{ name : string, age: number} = { name = 'xiaohong', age = 18}
const xiaoJieJies : string []= ['1,'2','3']
在ts中,很多的数据类型都会自动识别,这些是不需要我们去规定其类型的,比如上文中声明时,基本都是可以自动识别出的(为了规范,还是提倡大家不要偷懒)
但在一些特殊情况,例如函数中的返回值、传入参数的类型等这些都可由我们认为规定。
:never和:void都是没有返回值的意思,前者代表无法执行结束(死循环等),后者就纯代表无返回
(2)数组和对象数据类型规范
在函数中对对象数据类型进行规范: add({one ,two} : {one : number ,two : number} ) 【稍显麻烦】
数组数据类型规范: arr: (number | string)[ ] = [...] 【代表数据内部可以是number或者string,当然这种或者的写法在其他地方也可以使用】
数组内带对象: const girl:{name: string,age: number}[]= [....]
简易写法:将其一写在类型规范的位置上即可
类型别名: type name = {name : string, age: number} 可以单个的数据
类对象: class name = {name : string;age: number}
接口对象: interface name = {name : string;age: number} 只能是一个对象
对象一些特殊写法:
可选值: key ?: 类型
任意属性: [propname: string]:any;
(3)类的使用与继承
在上文中我们有些地方用到过类,这里会稍微详细的介绍有关ts中类的知识
1.数据方法私密度:共有三个限定的值,public(公开,无论类内部、外部都可以获取到)、private(只有在类的内部才能获取到)、protected(同样只有在类的内部可以获取到,但在继承的类也可以获取到)
其实还有另两个修饰词:static(用于修饰方法,不用实例化类即可调用)
readonly(只读,不可修改)
2.继承extends:class A {}, class B entends A{}即为B继承于A,B拥有A身上的一切属性和方法
3.构造函数:简单来说就是在生成类的对象(new)时,强制要求为生成的对象的某些属性赋值,不写构造函数系统会默认构造一个空的【java中是这样,这里不知道是不是,不过不影响】
写法: constructor( name : string){ this.name =name }
在继承中的构造函数: constructor(public age: number){ super( 'jspang ') } 即使用super调用父类的构造函数
4.对于private的数据,我们想要在类的外部修改怎么办呢?
getter:get age(){....} 外部获取
setter: set age(){....} 外部修改
5.枚举数据类型 enum States = {name,age,....} 即此时的States.name = 0(States[0] = 0),默认从0开始计数,想要从其他数据计数可以自行对name赋值
6.ts配置文件tsconfig.json(vscode终端下运行 tsc --init即可生成)【命令较多,主要说明使用较多的】
51行 "removeComments": true, 去掉注释
无 "include":[ .. . . ]
"files":[... .. ] 需要编译的文件,可以使用通配符
无 "exclude":[ .. . . ] 不需要编译的文件,可以使用通配符
77行 "strict": true, 严格模式
78行 "noImplicitAny": false, 注解类型为any时不需要标注
79行 "strictNullChecks": true, 不允许有null值出现
28行 "rootDir": "./", 需要编译的文件所在位置
50行 "outDir": "./", 编译好的文件存放位置
48行 "sourceMap": true, 开启源代码到编译后代码的映射,方便查错。
86行 "noUnusedLocals": true, 未使用的变量不编译
7.泛型<T>
即在定义函数时尚未考虑好使用什么数据类型或代码需要复用但数据类型不同时使用
写法: function join<T>(first: T,second: T) { ... .. } ; jion<number>(1,2)
8.其他,尚未学到,如有需要请联系本人添加!