目录
1、TS的变量声明
声明了类型之后,TS就会去进行类型的检测
var/let/const 标识符 :数据类型 = 赋值;
let message : string = 'hello world'
2、变量的类型推断
默认的情况下,会将赋值的值的类型,作为前面标识符的类型
let age = 18
console.log(age)
const height = 1.88 //类型的字面量1.88
console.log(height)
注意:使用 let 去声明的变量,推断的就是通用类型
使用 const 声明的变量,推断出来的是字面量类型
3、JS中的类型声明
其中number、string、boolean、null、undefined就直接写就可以了
对于数组和对象,需要去指定每一个具体是声明
// 平时的写法
let list: number[] = [1,2,3];
// 泛型数组
let got: Array<number> = [1,2,3];
// 元组 :是代表一个已知元素数量和类型的数组 就是可以放2个不同类型的元素
let midde: [String,number];
midde=['Ktton',18];
// 对象
const user:{
name:string,
age:number
} = {
name:'crt',
age:18
}
4、TypeScript的数据类型
any类型
在一些情况下我们无法一开始就确定一个变量的类型,它可能在中途会出现一些变化,
所以我们就会去使用any类型
let asg: any = "as写法";
any = 123
any = true
any = {}
unknow类型
和any类似,不同的是,unknown类型的值上做任何操作都是不合法的
let unk :unknown = 'aaa'
unk = 123
// console.log(unk.length);//报错
if(typeof unk === 'string'){
console.log(unk.length); //3
}
void类型
跟java一样 没有返回值但是它有形参
function sun (num1:number,num2:number){
console.log(num1+num2);
}
sun(20,30)
never类型
// never跟它的中文意思一样,永不发生
function foo() :never{
while(true){}
}
function bar():never{
throw new Error()
}
tuple类型 ---元组
元组中每个元素都有自己特性的类型,根据索引值获取到的值可以确定对应的类型
let arr1 :any[] = ['zxy',18,true]
let arrAge = arr1[1]; //后面会详细讲
二、TS的语法细节
1、 可选类型
可以去指定某个属性是否可选(或者不传),加个?就解决
function print(point:{x:number; y:number; z?:number}){
console.log(point.x);
console.log(point.y);
console.log(point.z);
}
// 直接传值
console.log({x:123}); //因为y并没有设置是否可传 所以就会报错
console.log({x:123,y:321}); //123,321
2、 联合查询
联合类型意思就是可以指定多个类型,表示可以是这些类型中任何一个值
function move(id:number | string){
// 应用场景:如果我们想要到id的长度那么,我们就要去类型进行指定
if(typeof id === 'string'){
console.log(id.length);
}else{
console.log(id);
}
}
move(123)
move('abc')
3、类型的别名
使用type关键字 或者是interface(接口)
type Idtype = String | number
function getid(id:Idtype){
console.log(id);
}
type pointType = { x: number; y: number; z?: number }
function printPoint(point: pointType) {
console.log(point.x)
console.log(point.y)
console.log(point.z)
}
4、 type和interface的区别
/*区别在于type类型的使用范围更广,interface只能声明对象
但是interface在声明对象的时候可以去进行追加
而且interface支持继承,继承的效果跟追加是一样的
*/
interface Person{name:string,age:number}
interface Son extends Person{habit:string}
const familed:Son = {name:'丹尼',age:18,habit:'孩子'}
5、交叉类型
交叉相当于就是满足多个类型条件,交叉类型使用&符号
interface man {
name:string
}
interface work{
work:()=>void
}
const me1:man|work={
name:'zzy'
}
const me2:man&work={
name:'zzy',
work:()=>{console.log('吃');
}
}
// 也可以用type关键字去进行别名
type Iperson = man&work
6、类型断言 as(重点)
可以手动改来指定一个值的类型,允许变量从一种类型更改成另一种类型,但是这个转换的类型只能是 更具体 || 不太具体 可以防止不可能的强制转换
let myvalue :any = "hello world";