TypeScript学习

先学会区分类型和类的区别。

JS的基本类型:null undefined symbol number boolean string bigint object

:对object的分类,如Array,Object等

注:typeof 函数 返回一个function,typeof null  返回一个object

const a:string = 'hi'
const b:number = 1
const c:undefined = undefined
const d:boolean = ture
const e:bigint = 123n
const f:symbol = Symbol('hi')
const obj:Object = {}
const arr:Array<number | string |null> = ['1',2,null]
.........................................................................................
const add = (x:number,y:number):number =>x+y //第一种 类型写在函数体中
-----------------------------------------------
const add:(x:number,y:number) => number =(x,y) => x+y  //第二种 写在:后面
-----------------------------------------------
type Add =(x:number,y:number) => number
const add:Add = (x,y) => x+y//第三种 常用写法type缩写
-----------------------------------------------
interface AddWithProps{
    (x:number,y:number):number
    xxx:string
}  // 第四种 有属性,只能用interface
const add2:AddWithProps = (x,y) => x+y
add2.xxx = 'yyy'

..........................................................................................

TS比JS多的类型:any,unknown,void,never,元祖,enum(枚举)

let a:any = 1
a = "1"//不报错,因为a为任意类型
.........................................................................................
type C = {name:string}
let b:unknown = JSON.parse('{"name":"frank"}')
console.log((b as C).name) //断言,不知道b的类型,我猜它为C
.........................................................................................
let print:() => void =() =>{console.log(1)} //不能加参数,尽量别用return
.........................................................................................

let a:never //a不能用,什么类型都不是
//举例说明
type Dir = 1 | 2 | 3 | 4 | undefined 
let dir:Dir
Switch(dir){
  case 1 :
    break;
  case 2 :
    break;
  case 3 :
    break;
  case 4 :
    break;
  case undefined :
    break;
  default:
    console.log(dir)
    break;
} 
//此时dir的类型为never,什么类型都不是,因为所有的类型都break了

//还可举例说明
type Dir = string & number //string 和 number 合集什么都不是,为never
........................................................................................
//元祖:不可变更长度的数组
let a:[number,number] = [1,2]
let a = [1,2,3] //会报错
........................................................................................
enum Dir2 = {1,2,3,4}
let d:Dir2 = Dir2.1
let d2:Dir2 = Dir2.2
//个人不喜欢用枚举,可以用另外一种方式
type Dir3 = '1' | '2' | '3' | '4' |
let d:Dir3 = '1'
let d2:Dir3 = '2'


TS泛型:

type Add<T> = (a:T,b:T) => T //T是广泛的类型,下边具体用到可以具体分类
const addA:Add<number> = (a,b) => a+b
const addB:Add<string> = (a,b) => a+' '+b

重载:

function add:(a:string,b:string):string;
function add:(a:number,b:number):number;
function add:(a:any,b:any):any{
    if(typeof a === 'number' && typeof b === 'number'){
        return a+b
    }else{
        return a+' '+b
    }
}

add(1,2) //可以执行
add('hello','world')//可以执行
add('hi',1)//报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值