const count: number =123;const firstName: string ="zhangsan";classPerson{}const student:{ name: string; age: number }={ name:"zhangsan", age:20};const numbers: number[]=[1,2,3];const Jack: Person =newPerson();const getTotal:()=>number=()=>{return123;};
type annotation 类型注解, 我们来告诉 TS 变量是什么类型。type inference 类型推断, TS 会自动的去尝试分析变量的类型。如果 TS 能够自动分析变量类型,我们就什么也不需要做了。如果 TS 无法分析变量类型的话,我们就需要使用类型注解。当 firstNumber 和 secondNumber 的值为 1 和 2 的时候,TS 已经做了类型推断,可以知道是 Number 类型,所以 total 也是 Number 类型。any 类型,允许在编译时可选择地包含或移除类型检查。如果不加类型注解,first 和 last 就会显示 any, 不知道变量是什么类型,加类型注解,first 和 last 就会显示 number,最后 getTotal2 传入值后,tot 也是 Number。对于 obj 对象,TS 也做了类型推断,name 是 String 类型,age 是 Number 类型,代码如下所示:
let countInference =123;const firstNumber =1;const secondNumber =2;const total = firstNumber + secondNumber;functiongetTotal2(first: number, last: number){return first + last;}const tot =getTotal2(1,2);const obj ={
name:"Jack",
age:18,};
在函数相关类型中,在给函数的参数做了类型注解以后,对于函数的返回值也要做一层约束,加上类型注解。void 类型像是与 any 类型相反,它表示没有任何类型,只能为它赋予 undefined和 null。类型为 void 时,定义 sayHello() 函数为空,没有返回值,不能 return,如果有返回值就会报错。never类型表示的是那些永不存在的值的类型,是任何类型的子类型,也可以赋值给任何类型。类型为 never 时,定义 errorEmitter() 函数永远不可能执行到最后一步。在多个参数的函数中进行解构赋值,需要以对象的形式,并且进行参数的类型注解以及函数返回值的类型注解。对于单个参数的函数中进行解构赋值,同样进行类型注解,代码如下所示:
functionadd(first: number, last: number): number {return first + last;}const total2 =add(1,2);functionsayHello():void{
console.log("hello");}functionerrorEmitter(): never {thrownewError()
console.log(123)}functionadd2({ first, second }:{ first: number; second: number }): number {return first + second;}functiongetNumber({ first }:{ first: number }){return first;}const total3 =add2({ first:1, second:2});const count3 =getNumber({ first:1});
三、Typescript 的数组、元组和接口
TypeScript 像 JavaScript 一样可以操作数组元素,它有两种方式可以定义数组。第一种,可以在元素类型后面接上 [],表示由此类型元素组成的一个数组。第二种,可以使用数组泛型,Array<元素类型>。对于数组,基础类型,后面需要跟上 [] 以及它前面的数组的类型注解。对于数组,对象类型,可以使用 type alias 类型别名,后面需要跟上 [] 以及它前面的别名的类型注解,代码如下所示:
const arr:(number | string)[]=[1,2,3];const stringArr: string[]=["1","2","3"];const undefindArr: undefined[]=[undefined];
type User ={ name: string; age: number };const objectArr: User[]=[{ name:"zhangsan", age:21}];classTeacher{
name: string;
age: number;}const objectArr2: Teacher[]=[newTeacher(),{ name:"zhangsan", age:21}];