Typescript 相比js特有
·类型系统; |
·对象的接口 |
·DOM操作时候需要进行类型断言 |
上面三个实际是类型系统的三处体现 |
·枚举 |
·js中,-号可以强制转换为数值,ts不行 |
所有合法的js都是ts
1、安装
安装进度卡住可以用淘宝镜像 (在后面加 --registry=http://registry.npm.taobao.org)
tsc -v 查看是否安装成功
2、编译并运行TS代码
手动编译 (注意要把ts文件放在项目目录第一级)
设置类型编译后两个文件产生如下区别
//1.ts
//1.js
总结:
创建ts文件->编译ts->运行js
简化复杂的过程:
1、在idea中勾选这个选项
好像不行
1、使用ts-node包
安装
直接用ts-node 1.ts运行文件
常用类型概述
更改类型js会报错 只能在运行后才能发现错误
但是ts就可以在编译时候提示错误
类型注解:
此处number为类型注解,作用:为变量添加类型约束,比如,上述代码中,约定变量age的类型为number(数值类型)
数组类型
推荐下图上面的红框里类型+[ ]的写法,下面的写法存在但是不推荐
let numbers: number[] = [1,3,5]
for (let number of numbers) {
console.log(number);
}
混合类型:
在括号里用竖线隔开多个类型使得数组中可以出现多种类型的变量
类型别名:
当混合类型很长后,每次书写就不方便,此时可以使用别名代替混合类型
常有基础类型综述:
js原有:
原始类型:
number |
string |
boolean |
null |
underfined |
symbol |
对象类型:object:(包括,数组,对象,函数等对象)
ts新增:
联合类型:
自定义类型(类型别名) |
接口 |
元组 |
字面量类型 |
枚举 |
void |
any |
原始类型的基本使用:
函数类型
1、单独指定参数、返回值的类型
函数表达式
2、同时指定参数、返回值的类型:
void类型(js中没有)
使用函数实现某个功能,参数可传也可以不传:
可选参数:在可传可不传的参数名称后面添加?(问号)
注意顺序,可选参数只能排在必选参数后面
对象类型(就是在描述对象的结构)
对象类型的写法 描述对象的属性和方法
let person:{name:string;age:number;sayHi():void}={
name:'jack',
age:19,
sayHi(){}
}
其中sayHi():void 也可以写成sayHi:()=>void
也可以把括号里分号去掉以换行分割属性
let person:{
name:string
age:number
sayHi():void}={
name:'jack',
age:19,
sayHi(){}
}
对象中的可选属性
与前面函数可选参数一样都是加问号
function myAxios(config:{url:string;method?:string}){}
myAxios({
url:''
})
接口
描述对象的类型达到复用的目的
实际上就是将对象名后面的括号单独拿出来写成接口
interface IPerson{
name:string
age:number
sayHi():void
}
let person2:IPerson = {
name:'jack',
age:18,
sayHi() {
}
}
interface(接口)和type(类型别名)的对比:
相同点:都可以给对象指定类型
不同点:接口,只能为对象指定类型。类型别名,不仅可以为对象指定类型,实际上可以为任意类型指定别名。
interface声明如果重名会自动合并属性,而type声明重复则会报错
type IPerson={
name:string
age:number
sayHi():void
}
let person2:IPerson = {
name:'jack',
age:18,
sayHi() {
}
}
接口继承:
当接口之间出现重合部分,为了避免复写,可以直接继承父类重复
interface Point2D {x:number;y:number}
interface Point3D extends Point2D{
z:number
}
let p3:Point3D={
x:1,
y:0,
z:3
}
一个接口继承另外一个接口的含义:这个接口具有父类接口里的所有睡醒和方法
元组类型
当数组中只有两个元素时候,因为数组无法定死数量,所以这时候可以用元组
let position1:[number,number]=[32,8]
let position2:[number,string]=[32,'8']
类型推论:
在Ts中某些场景,类型推论机制会自动识别类型,此时类型注解可以省略不写
并且类型检查和保护机制也存在
发生类型推论的2种常见场景:1声明变量并初始化的时候 2决定函数返回值时候
如果只声明没有初始化推荐还是手动指定类型
函数参数的地方一定要写类型,返回类型可以省略
推荐能省略类型就省略类型,充分利用类型推论机制,提高开发效率
类型断言
由于类型太宽泛,对象无法获取带a标签的href属性值
这时候可以用as关键字来类型断言
const aLink = document.getElementById('link')as HTMLAnchorElement
var href = aLink.href;
另一种方法是在document前面加<>里面写类型
类型可以通过在浏览器里输出标签的对象来查看,也可以直接打比如a标签就是HTML+a的单词类型