TS学习笔记(数据类型)

TS学习笔记(数据类型)

小满ZS CSDN链接添加链接描述
根据小满ZS教程学习记录

数据类型

字符串类型
//定义
let str:string = 'string'
//支持模板字符串
let muban:string = `web${str}`
数字类型
let number:number = 5
布尔类型
let boolean:boolean = false
//通过new函数方式创建
let b:boolean = new Boolean(1) //true
空值类型
let n:void = null //不可以赋值给别的变量
//void定义的函数不允许有返回值
function fn():void => {
    //禁止return
}
null和undefined
let n:null = null //跟void的区别就是可以穿插使用,void不可以赋值给别人,直接定义null和undefined可以进行赋值
let u:undefined = undefined
any类型
//可以赋值给任意类型,可以调用函数跟属性
let anys:any = 'my name is any'
anys = 18
anys = true
unknown类型
let unknown:unknown = '1'
// let unknown:unknown = {a:123} unknown类型,不可以使用对象的属性以及方法,unknown比any更安全,只能作为父类型使用,不能充当子类,赋值只能给unknown和any
接口和对象类型
interface A{
	name:string
}
interface A{
    age:number
}
//相同的两个会合并 得到interface A{name:string,age:number}
//obj中必须有接口的全部属性
let obj:A = {
    name:'张三',
    age:18
}

interface Person{
    readonly name:string, //readonly表示只读,不可以赋值
    age?:number | string, // ?表示可选式操作符,证明这个属性可以有,可以没有。  | 联合类型
    [propName:string]:any //可以在对象中有任意属性
}
let obj1:Person = {
    name:'张三', //不可修改 只读
    age:'18', //联合类型
    str:'str' //任意类型
}
//interface定义函数
interface Fn{
    fn():void
}
let obj2:Fn = {
    fn:() => {
        console.log('fn')
    }
}
obj2.fn() //'fn'
//interface继承
interface B extends Fn{
    age:number
}
let obj3:B = {
    fn:() => {
    
	},
    age:18
}
数组类型
//声明数组
let arr:number[] = [1,2,3] //number只能用number
let strArr:string[] = ['1','2','3'] //与number同理
let boolArr:boolean[] = [true,false]
let anyArr:any[] = [1,'2',false] //任意类型数组
//泛型定义
let arrFan:Array<number> = [1,3,4]
//声明多维数组
let arrNum:number[][] = [[],[]] //三维就是[][][]
let arrNum2:Array<Array<number | string>> = [[],[]]
//类数组
function Arr(...args:any):void{
    console.log(arguments)
    let arr:IArguments = arguments
    console.log(arr)
}
Arr(1,2,3)
函数扩展
//参数不能多传,也不能少传
const function = (name:string,age:number):string => {
	return name + age
}
function('张三',18)
//函数的可选参数,参数后面加??
const function = (name:string,age?:number) => {
    return name + age
}
function('张三')
//函数的默认值
const function = (name:string = '我是默认值',age:string = 18) => {
    return name + age
}
function('张三',19) //默认值可以修改
//接口定义函数
interface Add{
    (num:number,num2:number):number
}
const addFn:Add = (num:number,num2:number) => {
    return num + num2
}
addFn(5,5) //10
interface User{
	name:string,
	age:number
}
function getUserInfo(user:User){
	return user
}
//定义剩余参数
const shengyu = (array:number[],...items:any[]):any[] => {
    console.log(array,items)
}
let a:number[] = [1,3,4]
shengyu(a,'2','3')
//函数重载 重载是函数名相同,参数不同,返回值类型可以相同,也可以不相同,如果参数类型不同,则参数类型应设置为any,参数数量不同可以将不同参数设置为可选参数
function chongzai(params:number):void
function chongzai(params:string,params2:number):void
联合类型
let myPhone: number | string = 'iPhone'
// let myPhone:number | string = true //这样写会报错,因为联合类型中没有布尔值

//函数使用联合类型
const functionLianHe = (something: number | boolean): boolean => {
  return !!something
}
console.log(functionLianHe(true));

//类型断言
let fnNum = (num: number | string) => {
  console.log((num as string).length) //使用类型断言,number没有length,使用断言指定为string,string有length属性
}
fnNum('12345') //fnNum(12345)不会报错,但是会报undefined,类型断言只能够欺骗typeScript编译器,不能解决根本错误,不可滥用
interface Run {
  run: string
}
interface Build {
  build: number
}
let fnRun = (type: Run | Build) => {
  console.log((<Run>type).run) //类型断言的另一种写法,Build上面没有run属性
}
(<any>window).abc = 123 //any可以被断言成任何类型
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值