摘要:为了让程序有价值,我们需要能够处理最简单的数据单元:数字,字符串,结构体,布尔值等。 TypeScript支持与JavaScript几乎相同的数据类型,此外还提供了实用的枚举类型方便我们使用。
声明:如果文章有错误请及时在评论区指出
作者:来自ArimaMisaki创作
说明:我们说过,ts是对js弱类型的改进,改进方式是明确指出类型。
格式:变量名:数据类型
let age:number = 18;
age = 'hello';
console.log(age);
JS已有类型(原始类型):number/string/boolean/null/undefined/symbol/object
TS新增类型:联合类型、自定义类型、接口、元组、字面量类型、枚举、void、any等
说明:这里只介绍布尔、数字、字符串
// 1.布尔值
let a:boolean = false;
console.log(a , typeof a);
// 2.数字
let b1:number = 6;
let b2:number = 0xf00d; //16进制
let b3:number = 0b1010; //2进制
let b4:number = 0o744; //8进制
console.log(b1);
console.log(b2);
console.log(b3);
console.log(b4);
// 3.字符串
let c1:string = 'bob';
let c2:string = "oh";
let c3:string = `Gene`; // 模板字符串写法
console.log(c1);
console.log(c2);
console.log(c3);
// 常见语法
let numbers:number[] = [1,3,5]
// 数组泛型语法
let strings:Array<string> = ['a','b','c']
console.log(numbers);
说明:元组和数组类似,但不同的是元组中元素的类型和数量已知。
// 1 定义元素类型
let x: [string, number];
// 2 初始化
x = ['hello',10]
// x = [10,'hello'] 报错,10不是string类型,'hello'不是number类型
console.log(x);
// x[2] = 'world' 报错,不能越界访问
console.log(x);
说明:利用type
我们可以为自定义的数据类型起一个别名。
// 使用type关键字来创建别名
type CustomArray = (number | string)[]
let arr1:CustomArray = [1,'a',3,'b']
let arr2:CustomArray = ['x','y',6,7]
console.log(arr1)
console.log(arr2)
// 指定形参类型和返回值类型
function add1(num1: number, num2: number): number {
return num1 + num2
}
// 箭头函数语法 单独指定参数和返回值类型
const add2 = (num1: number, num2: number): number => {
return num1 + num2
}
// 箭头函数语法 同时指定参数和返回值类型
const add3: (num1: number, num2: number) => number = (num1, num2) => {
return num1 + num2
}
// 没有返回值类型
const add4 = (num1: number, num2: number): void => {
console.log(num1 + num2);
}
//可选参数 通过问号的形式说明可选
// 可选参数必须位于参数列表最后面,即可选参数后面不可出现必选参数
const mySlice = (start?:number,end?:number):void =>{
console.log('起始索引:',start,'结束索引',end);
}
console.log(add1(1, 2));
console.log(add2(2, 3));
console.log(add3(3, 4));
add4(4, 5)
mySlice(1)
说明:对象类型可以很好地表示Object.create这样的API。
// 对象字面量
let person:{name:string;age:number;sayHi():void} = {
name:'ArimaMisaki',
age:13,
sayHi(){}
}
// 对象可选属性
let myAxios = (config:{url:string;method?:string}) => {
}
console.log(person);
// 对象类型可以很好地表示Object.create这样的API
declare function create(o: object | null): void;
create({ prop: 0 }); // OK
create(null); // OK
create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error
说明:
enum
类型是对JavaScript标准数据类型的一个补充。 像C#等其它语言一样,使用枚举类型可以为一组数值赋予友好的名字。0
开始为元素编号。 你也可以手动的指定成员的数值。enum Color {Red, Green, Blue}
let c: Color = Color.Green;
console.log(c); // 为1号位起名为Green
// 查看1号位对应的名字
let colorName:string = Color[1];
console.log(colorName);// Green
说明:
let a: any = 1
console.log(a,typeof a); //1 number
a = '12'
console.log(a,typeof a); //12 string
// 替代联合类型
let list:any[] = [1,'a',true];
list[1] = 100;
console.log(list , typeof list); //[1, 100, true] object
说明:当一个函数没有返回值时,它可以归为void类型。
let fn = ():void=>{
console.log("hello");
}
fn()
说明:
// 返回never的函数必须存在无法到达的终点,如死循环
function infiniteLoop(): never {
while (true) {
}
}
说明:联合类型是一种比较高级的类型,内容繁多,我们在这里稍加提一下及可,后面进行更深入的学习。
// 小括号必加 表明该数组中含有number类型和string类型
let arr:(number | string)[] = [1,'a',3,'b']
console.log(arr);
说明:类型断言实际上可以理解为类型转换。有时候对于一些奇怪的数据类型TS可能无法做出判断,此时你可以使用类型断言的语法告诉它:你不知道让我来,我告诉你它是什么类型。
语法:
// ts不知道是什么类型,我们明确指出它是string类型
// 1.尖括号写法
let someValue1: any = "this is a string";
let strLength: number = (<string>someValue1).length;
// 2.as写法
let someValue2: any = "this is a string";
let strLength: number = (someValue2 as string).length;