ts使用自查手册
ts内置八种数据类型:string number boolean undefined null object bigint symbol
默认情况下null和undefined是所有类型的子类型,所以可以把null和undefined赋给其他类型
给变量定义类型赋值:
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")