文章第一句话为“这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
js是动态类型,ts是静态类型。动态类型是指只会在执行的时候做类型匹配。静态类型在编码 的时候就会确定。
ts的优点:增加可读性,增加可维护性,在编译阶段显示报错, 是js的超集(js有的ts都有)。
基本语法:
const s : string = 'xxx'
const n : number = 123 //基础数据类型就是在变量后面加个:类型
any(任意) , unknown(不认识,后面得明确类型) , void(函数设置没有返回值)
x as number //断言x是number
never 指无类型,类似“空集”
interface A {
readonly xxx:string //只读属性 不能改
name:string
sex:'man'|'woman' //代表只能是这两个
age?:number; //问号代表变量是可有可无的
[key:string] :any //任意属性,约束对象属性
}
const a:A = {
name:'fxj',
sex:'haha' //报错
age:20
}
interface fn {
(x:number,y:number):number;
}
const x:fn =(1,2)=>1+2
联合类型:A | B,表示一个值可以是几种类型之一。
const x:'-'|'+' //x只能是这俩
type A = {
name:string,
age:number
}
type B = {
name:string,
sex:string
}
const y:A | B //区分联合类型 用 if else
交叉类型 A & B , 表示A和B的交集
type X = {
name:string
} & { age:number }
const a:X = {
name:'fxj',
age:18
}
联合/交叉类型
const bookList:Record = [
{a:'',type:'',c:''},
{a:'',type:'',d:''} //这里指定是只有几种type
]
type Record =Array<{
a:string
} &({
type:'history'
c:string
} | {
type:'story'
d:string
})>
这个Record 类型是一个数组,里面是对象,对象必须有a,type:'history'和c必须同时有,或者type:'story'和d必须有
泛型:
当遇到类似的代码结构可以使用泛型
const a : (a:number,b:number)=>return a + b
const b : (a:string,b:string)=> return a + b
↓
type A<T> = (a:T,b:T) => T
const a:A<string> = ('1','2') => '1' + '2'