文章目录
一、TypeScript类型声明基本语法
1.1 TS的类型声明
先声明变量再赋值
let aa:boolean;
a=false;
声明的同时进行赋值
let b:number=2;
这是上面那种的简写
声明和赋值同时进行ts会自动为我们进行声明
let cc = false;
cc=1; //此时会报错,上面那里隐式给cc声明了类型boolean
函数的参数声明和返回值类型声明
// 这里最后一个:string是函数的返回值
function fun(num1:number, string1:string):string{
console.log(`${num1}和${string1}`);
return `${num1}和${string1}`;
}
fun(1,"number");
1.2 TypeScript的基础类型
1.2.1 number类型
数字类型统为一number,TypeScript和JavaScript一样,不区分整数,浮点数和双精度浮点数(int, float, double)
let num1:number = 100;
// 0b表示二进行 0、1
let num2:number = 0b100;
// 0o表示八进制 0-7
let num3:number = 0o107;
// 0x表示十六进制 0-10、A-F
let num4:number = 0x100F;
let num5:number = 88.88;
console.log(num1);
console.log(num2);
console.log(num3);
console.log(num4);
console.log(num5);
输出结果:
PS C:\source\TypeScript\demo01> ts-node demo.ts
100
4
64
4111
88.88
1.2.2 boolean类型
表示逻辑值:true或false
1.2.3 string类型
一个字符系统,使用单引号(')或双引号(")来表示字符串类型,反引号(`)来定义多行文本和内嵌表达式。
let name:string="tom";
let age:number=25;
let introduce:string=`我的名字叫${name},今年${age}岁了`;
console.log(introduce);
输出结果:
PS C:\source\TypeScript\demo01> ts-node demo.ts
我的名字叫tom,今年25岁了
1.2.4 数组
语法:
- 数据类型[]
- Array<类型>
let arr01: string[]; //字符串数组
let arr02: number[]; //数值数组
let arr03: Array<number>; //数值数组
1.2.5 特殊类型
null:表示对象值缺失。
undefined:用于初始化变量为一个未定义的值。
never:never是其他类型(包括null和numdefined)的子类型,代表从不会出现的值。
any:表示任意类型
any表示任意类型,一个变量设置any相当于对该变量关闭ts类型检测。
let aa:any;
let bb; //声明变量不指定类型,则ts解析器会自动判断变量的类型为any(隐式any)
bb=10;bb="haha";bb=true;
unknow表示未知类型,要么赋值给any,要么赋值给unknow类型
never表示永远不会有返回结果
function fun():never{
// 报错没有返回值的
throw new Error("直接报错!");
}
1.2.6 Object
Object表示一个对象,但是在js中万物皆对象function、array等
let obj: object;
obj = {};
obj = function(){};
let obj2:{name:string,age?:18};
obj2 = {name:'张三'};
let obj3:{name:string,[propName:string]:any};
obj3 = {name:'李四', age: 18, sex: true};
console.log(obj3);
输出结果:
PS C:\source\TypeScript\demo01> ts-node demo.ts
{ name: '李四', age: 18, sex: true }
PS:
- {}用来指定对象中可以包含那些属性
- {属性名:属性值,…}
- 在属性后边加上?,表示属性是可选的
定义一个箭头函数
// 定义一个箭头函数,相当于函数对象类型
let fun1:(a:number, b:number) => number;
// 这个函数对象类型具体的实现
fun1 = (n1, n2) => n1 * n2;
// 调用这个函数
console.log(fun1(1, 3));
PS: 上例中的函数好像一个接口,按照这个接口的规范可以有不同的实现。
1.2.7 联合类型
可以使用|连接多个类型
let b: 'sex' | 'girl';
// b = 10; 此时b就不能再等于其他值,要么是sex要么是girl
b = 'sex';
// 要么是布尔值,要么是字符串类型
let c:boolean|string;
c = true;
c = "hello";
// c = 12 报错
console.log(b);
console.log(c);
// 定义一个函数,参数和返回值都可以是联合类型
function fun88(a:number|string, b:number|string):void|number{}
// 联合类型的数组
let arr:(string|number|boolean)[] = ['abc', true, 6, 'aaa'];
arr.push('gaga');
arr.push(5);
arr.push(false);
console.log(arr);
&同时
// 需要同时满足name为string类型并且age为number类型
let j:{name:string}&{age:number};
// 必须要有name和age少一个或者类型不对都会报错
j = {name:"张三", age: 20};
// j = {name:"李四"}; 报错
console.log(j);
字面量进行类型声明
let a:10;
a = 11; //措错此时a就只能等于10
let sex: 'female' | 'male' //只能使用固定值