这是我参与「第四届青训营 」笔记创作活动的第10天,这篇文章是对TS类型的使用和个人一些理解
TS中的基本类型
基础类型
boolean string number null undefined symbol any never void
引用数据
object interface
数组
number[] string[] boolean[]
范型
Type< T >
如何定义一个类型
type
type TsType={
name:string
}
interface
interface TsType{
name:string
}
type和interface的区别
type支持类型计算,type类型可以用通过extends来判断自己是否属于这个类型,而interface不支持这么做,但是interface支持的是通过entends来实现继承。
我们先来讲讲never类型
never类型用到最少,但我认为十分有用的类型
export const useReducerDynamic = (path: LinkItemPathTypeOrigin) => {
switch (path) {
case "/main":
return SubsetArrayIndex;
case "/course":
return SubsetArrayCourse;
case "/news":
return SubsetArrayNews;
case "/events/all":
return SubsetArrayEvents;
default:
const NeverPath:never = path;
}
};
在上方的代码事例我们可以看到,switch语句的匹配一个联合类型LinkItemPathTypeOrigin(由多个类型组合的类型),这个path在进入到default语句的时候,如果还有别的类型没有被匹配那么就会引起ts的报错,别担心这正是我们想要的结果。这因为never类型是永远到不了的,所以才可以用来做类型检查,当LinkItemPathTypeOrigin中多加入一个类型式就会提醒我们在swicth语句中做出相应的处理
Ts的范型
我们先从平时使用支持ts类型的库中讲讲范型,在使用一些库函数的时候,一般都会提供给我们一个范型接口,让我们用户自定义类型
const value = useType<{
content:string
}>()
在上述代码我们用过范型接口自定义了我们想要的类型,那么这个范型函数是怎么做到的呢?
const useType = <T>():T=> { xxxxx }
可以看到我们通过< T >的形式,为用户侧提供了自定义的类型接口,并将该接口的类型用来约束函数的返回值类型。