这是我参加「第四届青训营 」笔记创作活动的的第2天
TS实战
最近在做项目中用到了TS,因为刚学TS没多久,于是就想着在项目中进行实战,结合项目和官方文档,收成也是蛮多的。TS作为JS的超集,就连官方都提出了在之后的JS中并入TS,这也足以证明TS做类型限制的一个实用性。而在简略的项目中,想要完成日常开发,只需求了解到 type 和 interface 就足够了,但关于想要开发组件库或许更杂乱情况下,就需求运用TS的更多高档功用了,例如类型揣度、类型束缚、类型结构、条件类型这些功用。这也是所谓的入门容易精通难。在做项目这么久之后,也略微理解了一下TS。
type
type 又叫类型别号,是将各种类型的组合从头赋值给一个新的类型,相当于变量声明,而新结构的变量能够运用于大多数场景,对代码进行类型检查。
type A = string | number;
type B = {a:number} & {b:string};
type C = (a:number) => number
interface
TS的中心准则便是对值的一切结构进行检查,被称作“结构性子类型化”。接口的作用便是对你的代码还有第三方代码签订契约,使得代码需求符合接口的结构。
interface FirstInterface {
name: string,
readonly size: number, // 只读类型
state?: string //可选类型
}
function printName(nameObj:FirstInterface) {
console.log(nameObj.name)
}
let nameObj = {
size: 10,
name: 'taiiiyang'
}
以上便是对对象运用接口,只要满意了接口的必要条件,那么该类型就能经过检查。接口不止能够作用于对象,还能够作用于函数、结构器、类。一起接口内部还能支撑索引类型。经过结构不同的接口来实现对类型的限制,在开发过程中也能具有TS提示功用。
interface ClockInterface {
currentTime: Date
}
// 此刻这个类中就需求有 currentTime 特点
class Clock implements ClockInterface {
currentTime: Date;
}
接口也支撑继承,一个接口能够继承多个接口,创建出多个接口的组成接口
interface One {
one: number
}
interface Two {
two: string
}
interface Final extends One, Two {
Final: string | number
}
接口和变量重命名的区别是,概念上的不同,变量实际上还是一种类型结构,一个接口中能够包括多个不同中的类型,两者都能够对类型进行限制。而类型别号还能用于类型结构,这也是TS高档的玩法。
泛型
实战中会出现类型不确定的情况,这种时分就轮到泛型进场了
function identify<T>(arg: T): T {
return arg
}
这也是非常重要的一点,函数或许类型在运用的时分会经过<>去接受一个类型,而在后边的操作中就能够经过泛型来对类型进行确定。经过不同的操作来对类型进行束缚,泛型能够进行简略的类型限制,一起也能进行愈加深邃的类型结构。
泛型束缚:经过extends来对泛型进行束缚,使得泛型能够具备特定的条件,便于之后的特点读取操作
interface FirstExtends {
a: number
}
function Hello<T extends FirstExtends>(arg:T):T {
console.log(arg.a) // 这样TS就不会报错了
}
泛型并不是只能支撑一个,他能够一起支撑多个,也能在传入参数时自动推导类型,也能够在类型重命名中运用泛型进行推导,作为该声明的局部变量运用,这点也是TS高阶的一部分。
总结
以上这些属于TS的根底,在实际开发中经过根本的操作例如交叉类型、联合类型、类型揣度、就能胜任大部分操作,而关于高阶的类型,就需求更杂乱的操作,这些留着之后再聊。