Ts是什么
- ts是一门静态类型、弱类型的语言
- js是在浏览器运行的时候,边解释边运行,所以js是动态语言,相对的,ts需要先编译,编译成js,ts是静态类型的语言
- 强类型与弱类型是根据数据类型是否进行隐式转换来判断的,可以运行下面的代码,可以看见ts与js一样自动进行类型的隐式转换,ts是一门弱类型语言
let a = 1;
let b = "2";
let c = a + b;
console.log(c);
ts基础
- 字面量类型表示取值只能是几个值中的一个,可以使用string、boolean、number等值作为类型
type Person="zhang san" | "li si";
let person:Person="li si";
- 类型别名是给类型起一个名字,一般用于联合类型,方便使用
type Person="zhang san" | "li si";
- 联合类型,是用|连接的类型,表示可以取多个类型中的一种类型,相当于or
type Person="zhang san" | number;
let person:Person="zhang san";
- 交叉类型表示的是多个类型合在一起,类型之间用&连接,与联合类型不同的是,交叉类型不是选择使用其中的一个类型,而是所有类型都融合在一起,一起生效,一起约束
interface Age {
age: number;
}
interface Property {
firstName: string;
lastName: string;
}
type Person = Age & Property;
const person = (obj: Person) => {
const {age,firstName,lastName}=obj;
console.log(age,firstName,lastName);
};
- 数组可以定义相同类型的数据的组合,元组可以定义不同类型的数组的组合
- 元组在对应位置只能赋值对应类型的值
let arr: [number, string, boolean] = [1, "1", true];
- 当不确定需要定义为某一个类型的时候,可以把一个范型当成一个参数传入使用这个类型,在实际使用时,再确定需要使用的类型就是范型
type func<T> = (a: number, b: string, c: T) => T;
let fun: func<boolean> = function (a, b, c) {
console.log(a, b, c);
return c;
};
fun(1, "1", true);
ts 类型声明
基本数据类型
let num=1;
let str='str';
let bool=false;
let undef=undefined;
let nul=null;
let num:number=1;
let str:string='str';
let bool:boolean=false;
let undef:undefined=undefined;
let nul:null=null;
let num:2=2;
let str:'str'='str';
let bool:false=false;
引用数据类型
interface Person {
name: string;
age: number;
}
let p: Person = {
name: "张三",
age: 18,
};
interface Person1 {
name: string;
age?: number;
}
let p1: Person1 = {
name: "张三",
age: 18,
};
interface Person2 {
(a: string, b: boolean): boolean;
}
let fun2: Person2 = function (a, b) {
console.log(a, b);
return b;
};
type func = (a: number, b: string) => string;
let fun: func = function (a, b) {
return a + b;
};
type func1 = (a: number, b: string, c?: boolean) => string;
let fun1: func1 = function (a, b) {
return a + b;
};
type func3<T> = (a: number, b: string, c: T) => T;
let fun3: func3<boolean> = function (a, b, c) {
console.log(a, b, c);
return c;
};
- 直接定义数组(基本数据类型后面跟一个[ ]定义数组)
let arr: number[] = [1, 2, 3];
let arr1: string[] = ['1', '2', '3'];
let arr2: Array<number> = [1, 2, 3];
let arr3: Array<string> = ['1', '2', '3'];
let arr4: Array<boolean> = [true, false, true];
let arr5: [number, string, boolean] = [1, "1", true];