TS学习笔记

### 1. 类型系统

#### 数字类型声明:

let e:number;

#### 字符串类型声明:

let e:string;

#### 布尔类型声明:

let e:boolean=true;

//也可以声明完直接进行赋值,如果变量的声明和赋值是同时进行的,ts 可以自动对变量进行类型检测

等同于 let e=true;

JS 中的函数参数,不考虑类型和个数
function sum(a,b){
return a+b
}

TS 定义参数的类型:
function sum(a:number,b:number){
return a+b
}
sum(1,'b') // 此处提示报错:b 不是数字类型

定义返回值的类型:

function sum(a:number,b:number):number{
return a+'aaa' // 此处提示报错: 返回值的类型错误
}

#### 字面量类型声明:

let e:10;
e=11 // 此处会进行报错,e 已经被定义为 10,无法再赋值成别的值,有点类似于常量

#### 联合类型,| 用来连接多个类型

let e: "male" | "female";
e="male";
e="female";
e="hello"; // 此处会进行报错,hello 不是 male 或 femle

let e: boolean | string;
e=true;
e="aa";
e=10; // 报错,10 为数值类型

#### 任意类型:any,可以任意赋值,一个变量设置成 any 后相当于对该变量关闭了类型检测,不建议使用 any

let e:any;
e = 10;
e = "aaa";
e = true;

关于赋值:
let s; // s 的类型为 any
s=1234;
let e:string;
e=s; // e 的类型也被改变

#### unknown 类型

let s:unknow;
s=1235;
let e:string;
e=s; // 报错

#### 类型断言:

不允许不同类型的值进行赋值
let e:unknown;
let s:string;
e='hello'
if(type of e==="string"){
s=e;
}
已上写法等同于:
s = e as string
或者
s= <string>e

#### void:相对于函数返回值而言

function fn():number{
return 124
} // 此时返回值类型为:number

function fn():boolean{
return true
} // 此时返回值类型为:boolean

function fn(){} // 此时返回值类型为:void

function fn(num){
if(num>0){
return 1234
}else{
return false
}
} // 此时返回值类型为 any: 1234||false, number||boolean

function fn():void{
return 123; // 报错
return true; // 报错
不允许存在返回值
return // 可以
return undefined // 可以
return null // 可以
}

#### never:相对于函数返回值而言

function fn():never{ // 永远没有值
return undefined // 报错,不允许返回
throw new Error("程序报错,终止运行") // 用来提示程序报错,永远不会返回结果
}

#### object 对象

let a:object;
a={}
a=function(){}

可以直接写成
// {}用来指定对象里包含哪些属性
let a:{}
let a:{name:string}
a={} // 报错,没有 name 属性
应该写成
a={name:'Tom'}
a={name:'Tom',age:18} // 报错,age 没有存在于对象里

let b:{name:string,age:number}
b={name:'Tom'} // 不传 age 报错
可以写成
let b:{name:string,age?:number} // ?表示 age 可选
b={name:'Tom'} // 不传 age 可以

let c={name:string}
c={name:'Tom',age:12,gender:'female'} // 报错
可以写成
let c={name:string,[propName:string]:any} // [propName:string]:any 表示:任意字符串类型的属性
c={name:'Tom',age:12,gender:'female'} // name 必写,其他随意

<!-- 定义函数 -->

设置函数结构的类型声明
语法: (形参:类型,形参:类型,...)=>返回值
// 声明
let d:(a:number,b:number)=>number
// 赋值
d=fucntion (n1,n2):number{
return n1+n2
} // 符合声明

d=fucntion (n1,n2,n3):number{
return n1+n2
} // 报错,n3 未进行声明

#### 数组类型声明:

语法: ① 变量:类型[]
② 变量:Array<类型>

##### 字符串数组

let e:string[]; // string[]:
let e:Array<string>;
let a:string;
a=['a','b',1,2,4] // 报错,1,2,4 不是字符串类型

##### 数值数组

let e:number[];  
let e:Array<number>;

##### 任意类型数组

let e:any[];  
let e:Array<any>;

##### tuple 元组:固定长度以及类型的数组 tuple

let h:[string,string]
h=['aaa','bbb','ccc'] // 报错,规定了两个,不允许写三个

##### enum 枚举

ennum Gender={
male=1,
Female=2
}
let a:{name:string,gender:Gender}
a={
name:'Tom',
gender:Gender.male
}
console.log(a.gender===Gender.male)

let b:string|number; // b 的类型是 string 或者 number
let b:string&number // 报错, 不满足既是字符串又是数字的情况
let b:{name:string}&{age:number};
b={name:'Tom',age:18} // 可以

##### type 类型的别名

let c:1|2|3|4;
let d:1|2|3|4;
可以写成
type myType=1|2|3|4
let c:myType
let d:myType
c=7  // 报错,myType里没有7
posted @ 2022-12-05 10:16  宫圆薰  阅读(50)  评论(0编辑  收藏  举报