【TS】typescript基础知识

一、类型注解

: number就是类型注解,为变量添加类型约束的方式,约定了什么类型,就只能给变量赋什么类型的值

let age: number = 18

二、变量命名规则和规范

命名规则:变量名称只能出现数字,字母,下划线(_),美元符号($),并且不能以数字开头

命名规范:变量名称有意义,推荐使用驼峰命名法(首字母小学,后面每个单词首字母大写)

三、数据类型

原始类型:基本数据类型:number、string、boolean、underfiend、null

//number类型
let size: number = 18
//string类型
let food: string = 'ice cream'
//boolean类型
let isOpen: boolean = true
//underfiend类型
let u: underfiend = underfiend 
//null类型
let n: null = null

对象类型:复杂数据类型
对象类型注解,ts中的对象是结构化的,在使用对象前,可以根据需求,提前设计好对象的结构

//类型注解(对象的结构化类型),建立一种契约,约束对象的结构,类型注解中键值对的值为类型
let person : {
    
    
name:string;
age: number
}
//ts中的对象
person = {
    
    
name:'llh';
age: 36
}

对象方法的类型注解:

let p1 :{
    
    
sayHi:()=>void //无参数无返回值
}
let p1 = {
    
    
sayHi:function(){
    
    
console.log(1)
}
}

let p2: {
    
    
sing:(name:string) => void   //有参数无返回值
}
let p2 = {
    
    
sing:function(name: string){
    
    
console.log(2)
}
}

let p3 :{
    
    
sum: (num1:number,num2:number) => number  //有参数有返回值
}
let p3 = {
    
    
sum:function(num1:number,num2:number){
    
    
return num1 + num2
}
}

数组对象

let nums: number[] = [10,20,30,40,]
let sum: number = 0
for(let i = 0,u<nums.length,i++){
    
    
sum+=nums[i]
console.log(sum) //100
}

forEanch的回调函数,是否需要为参数或返回值指定类型注解?
不需要,此处的回调函数,是作为forEach方法的实参传入,不应该指定类型注解
ts创建forEach方法的时候,就已经指定好了forEach方法的参数以及参数的类型注解
如:

function forEach(callbackfn:(value:string,index: number)=>void)

forEach(function(value,index){
    
    })

四、接口的使用

直接在对象名称后写类型注解,1代码结构不简洁 2无法复用类型注解
如:

let p1 :{
    
    
name: string,
age: number,
sayHi:()=>void 
} = {
    
    
name:'llh',
age:36,
sayHi:function(){
    
    
console.log(1)
}
}


let p2 :{
    
    
name: string,
age: number,
sayHi:()=>void 
} = {
    
    
name:'fdb',
age:16,
sayHi:function(){
    
    
console.log(1)
}
}

使用接口,为对象的类型注解命名,并为代码建立契约来约束对象的结构,接口名称约定以I开头
语法:

interface IUser {
    
    
name: string
age: number
}

使用:

let p1: IUser  = {
    
    
name:'llh',
age:36,
sayHi:function(){
    
    
console.log(1)
}
}
let p1: IUser  = {
    
    
name:'fdb',
age:16,
sayHi:function(){
    
    
console.log(1)
}
}

五、TS类型推论

在TS中,某些没有明确指出类型的地方,类型推论会帮助提供类型,类型注解可省略不写
使用场景:
1、声明变量并初始化时

interface IUser {
    
    
name: string
}
let age: number = 18
如果改成以下写法也可以
let age = 18 

类型推论给出来的还是number,类型推论根据值推论出是数值类型
在这里插入图片描述

let person: IUser ={
    
    
name:'lilianhua'
}
等同于
let person ={
    
    
name:'lilianhua'
}

如果先声明变量后赋值,则不会类型推论,如:

let num ;
num = 12

any代表任意类型
在这里插入图片描述
2、决定函数返回值时

function sum (num1: number,num2: number): number{
    
    
return num1 + num2
}
sum(1,6)

等同于:
function sum (num1: number,num2: number){
    
    
return num1 + num2
}
sum(1,6)

TS会根据rerurn后面返回的内容推论出函数返回值的类型,如果return 后面的是true,那函数返回值就变成了boolean
在这里插入图片描述

六、TS类型断言

调用querySelector()通过id获取DOM元素时,拿到的元素类型都是Element。因为无法根据id来确定元素的类型,所以该方法返回了一个宽泛的类型,元素类型(Element)
元素类型只包含所有元素共有的属性和方法,如id属性,但是如果是img标签,则拿不到img元素的src属性

类型断言可以手动指定更加具体的类型
语法:

值 as 更具体的类型

如:

let img = document.querySelector('#image')
改为
let img = document.querySelector('#image') as HTMLImageElement
意为:我们确定id="image"的元素是图片元素,我们将类型指定为HTMLImageElement

小技巧:通过console.dir()打印DOM元素,在属性的最后面,即可看到该元素的类型

console.dir(img)

在这里插入图片描述

七、TS对象枚举

ts枚举 enum 枚举名称 {成员1,成功2,…},约定枚举名称,成员名称以大写字母开头

enum Gender {
    
    Female,Male}

枚举使用,枚举是一种类型,因此可以作为变量的类型注解

enum Gender {
    
    Female,Male}
let userGender: Gender

访问枚举Gender 中的成员,作为变量userGender的值,枚举成员只读,不可编辑

enum Gender {
    
    Female,Male}
let userGender: Gender = Gender.Famale
userGender = userGender.Famale ? Gender.Famale :Gender.Male

枚举成员是有值的,默认为从0开始自增的数值,枚举成员的值为数字的枚举,称为数字枚举

enum Gender {
    
    
Female,//0
Male,//1
a,//2
b,//3
c//4
}

枚举成员可以初始化值

enum Gender {
    
    
Female = 1,
Male = 2,
a = 44,
b = 55,
c = 66
}

枚举成员的值为字符串的枚举,称为字符串枚举,字符串枚举没有自增行为,因此每个成员必须有初始值

enum Gender {
    
    
Female = '女',
Male = '男',

}

猜你喜欢

转载自blog.csdn.net/weixin_49668076/article/details/132448180