TypeScript类型使用理解 | 青训营笔记

115 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第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 >的形式,为用户侧提供了自定义的类型接口,并将该接口的类型用来约束函数的返回值类型。