Ts的类型和类型声明
Ts的类型声明
先声明变量 再赋值
let a : boolean ;
a = false;
声明的同时进行赋值
let b : number = 2;
这算是第二种的简写 因为声明和赋值同时进行的话 ts会自动为我们进行声明
let c = false;
// c = 1;//此时也会报错
函数的参数声明和返回值类型声明
//js中的函数是不会考虑参数的数量和类型的
function fun(num1:number,string1:string):string {//最后一个string是该函数的返回值
console.log(`${num1}和${string1}`);
return `${num1}和${string1}`
}
fun(1,"number");
Ts的类型
字面量进行类型声明
//字面量进行类型声明
let a : 10;
// a = 11;//此时a就只能等于10不能再是其它值
可以使用 | 连接多个类型(联合类型)
let b : "sex" | "girl";
// b = 10;此时b就不能再等于其他值,要么是sex要么就是girl
let c : boolean | string;//这样写也可以要么是布尔值要么是字符串类型
// c = true; c = "haha"; c = 12;//不能为数字
any 表示任意类型
//any表示任意类型 一个变量设置any相当于对该变量关闭ts的类型检测 不建议使用
let d : any;
let e;//声明变量不指定类型,则ts解析器会自动判断变量的类型为any(隐式的any)
d=10; d="as"; d=true;
unknow 表示未知类型
//unknow 表示未知类型 是一个类型安全的any 不能直接赋值给其它变量
let f : unknown;
f=10;f="as";f=true;
let s :string;
s =d;//any可以将任意值都赋给其它变量 所以很危险不仅搞自己还把别人也搞了
// s = f;//unknow就不行,此时会有下波浪线提示
//unknow我们可以通过下面的语法进行赋值
//第一种通过判断
if(typeof f === "string"){
s = f;
}
//第二种通过断言
s = f as string;
//第三种<>
s = <string>f;
//表达意思是一样的 都是表达当f为string时才给s赋值
void用来表示空
//void用来表示空,以函数为例,表示没有返回值的函数
function fun():void {
// return 123;//此时再返回就会报错
}
never表示永远不会有返回结果
//never 表示永远不会返回结果
function fun2() : never {
throw new Error("直接报错!");
//像这种直接报错没有返回值的
}
object
// object 表示一个对象 但是在js中万物皆对象 function array等
let obj : object;;
obj = {};obj = function () {};
/*
* {}用来指定对象中可以包含那些属性
* 语法:{属性名:属性值,属性名:属性值}
* 在属性名后边加上?,表示属性是可选的
* [propName:string]:any表示可以任意类型的属性 any换成number表示其余类型的值只能是数字
* */
let obj2 : {name:string,age?:18};
obj2 = {name:'ad'};//此时age就可写可不写
let obj3 :{name:string,[propNmae:string]:any};
obj3 = {name:'sda',age:18,sex:'男'};
函数参数类型
/*
* 设置函数结构的类型声明
* 语法:(形参:类型,形参:类型...) => 返回值的类型
* */
let fuc : (a:number,b:string) => string;
fuc = function (n1,n2):string {
return "asd";
};
数组
/*
* 数组
* 语法:类型[];
* Array<类型>
* */
let arr : string[];//表示字符串数组
let arr2 : number[];//表示数值数组
let arr3 : Array<number>;//这种方式跟上面那种相同
元组 固定长度的数组 tuple
/*
* 元组,固定长度的数组 tuple
* */
let ya :[string,string];//长度为2类型为字符串的数据
枚举
/*
*enum 枚举
* */
enum Gender{
Male,//这里相当于0
FeMale,//这里相当于1
}
let eu : {name:string,gender:Gender};
eu = {
name:'asd',
gender:Gender.Male,
};
// console.log(Gender.Male);//此时输出为0
&同时
//&表示同时
let j : {name:string} & {age:number};//此时要同时满足name为string类型age为number类型
j = {name:'jsjsj',age:18};//必须要有name和age少一个或者类型不对都会报错
类型的别名
type myType = 1 | 2 | 3 | 4 | 5;
let t : myType;//此时1 | 2 | 3 | 4 | 5这串太长而且可能很多地方都会使用此时我们就可以使用别名
let t2 : myType;
type myType = {
name:string,
age:number
};
const obj:myType = {
name:"asa",
age:18
};