ts使用手册

109 阅读3分钟

ts使用自查手册

ts内置八种数据类型:string number boolean undefined null object bigint symbol
默认情况下nullundefined是所有类型的子类型,所以可以把nullundefined赋给其他类型
给变量定义类型赋值:
let str: string = 'aaa'
let num: number = 123
let boo: boolean = true
let und: undefined = undefined
let nu: null = null
let obj: object = {a: 1}
let big: bigint = 100n
let sym: symbol = Symbol('ab')
!!!虽然number和bigint都是表示数字,但是两者不兼容

还有readonly、void、never、any、unknown类型

常规定义数组类型的两种方式
let arr: string[] = ['1', '2']//定义数组,参数为string类型
let arr: Array<string> = ['1', '2']//定义数组,参数为string类型
定义联合类型数组的方式
let arr: (number | string)[] = ['1', 2]//定义数组,参数可以为string类型和数字类型
定义成员为指定对象的数组的方式
interface Person{//接口, 使用这个类型定义的变量必须符合这个类型的属性(多一个、少一个属性都不允许)
    name: string,
    age: number,
    sex: string
}
let list: Person[] = [{name: "jason",age: 11,sex: "male"},{name: "jack",age: 14,sex: "male"}]

常规定义函数的方式
function sum(a: number, b: number): number{  //定义一个函数,参数为number类型的两个数,返回的结果为number类型
    return a+b;
}
用接口方式去定义函数类型
interface funArgs{
    (a: number,b: number,c?:number): number  //用接口方式定义函数参数和返回值类型,?为可选参数调用函数时可以不传参
}
function sum:funArgs{
    return a+b;
}
参数默认值以及传参数量不确定
function fun(a: number,b: string = 'asdf',...item: any[]){
//给参数传入默认值,当不确定参数有多少个时可用...item:any[]来接收
}

定义联合类型(即变量参数可以时number类型也可以是string类型,可以取值多种类型中的一种)
let a = string | number
类型别名(常用于给联合类型起一个新名)
type Comtypes = string | number
函数重载即使用同一个函数,根据参数的类型不同,返回不同的结果
function add(a: Comtypes,b: Comtypes): Comtypes{//当参数为string类型时字符串拼接,当参数为number类型时相加
    if(typeof a === 'string' || typeof b === 'string'){
        return a.toString()+b.toString();
    }
    return a+b;
}

元组是一个类似数组的东西,它可以限制元素的个数和类型
let x: [string, number]  = ['jason', 18]//类型必须匹配且个数相同
元组类型的可选元素
let x: [string, number?]//该变量的类型表示必须有一个字符串类型和一个可选的数字类型


类型推断是指具有初始化值的变量、有默认值的函数参数、函数返回的类型可以根据上下文推断出类型

类型断言语法
value as string //value为string类型
<string>value//value为string类型
非空断言
let a : null | undefined | string//a可能是null、undefined、string类型
a! //排除a是null和undefined的可能性

接口的可选、只读属性和任意属性
interface Person{
    name: string;//必须有属性
    age: number;//必须有属性
    readonly sex: string;//只读属性,不能修改
    hobby?: string;//可选属性
    [propName: string]: any;//任意属性的类型要包含必须属性和可选属性的类型
}
接口可以继承接口扩展
interface X{
    x: number;
}
interface Point extends X{
    y: number;
}

泛型T (T就是Type,只有在调用函数时才知道具体的类型是什么)
function fun <T>(args: T): T{
}
当多个类型变量时
function fun <T, U>(value: T, message: U):T{
}
调用函数 fun<number, string>(11, "dfsd")或者fun(11, "dfsd")