首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一文看懂TypeScript工具类型

基础知识 泛型 我们先看一个泛型的例子: function identity(arg: T): T { return arg; } const a = identity('foo...在泛型类型声明的时候泛型可以是多个,可以给默认值,有默认值的泛型参数是可选泛型参数,可选泛型参数需要放在泛型定义的后端。...U的默认值是T也就是boolean 泛型约束 泛型约束是在泛型的类型参数上定义一个约束条件,从而限制了泛型实际类型的最大范围,这个类型参数的约束条件就是泛型约束,语法采用了 extends 关键字,类似于类的继承...约束条件有点特殊,它可以引用泛型列表中的其他类型,但是不能循环引用。...类型查询 在JS中 typeof 可以判断一个变量的类型,TS对 typeof 做了扩展,在类型别名 type 等号右侧的 typeof 获取的是变量在TS中定义的类型。

27310

TS 从 0 到 1 - 泛型进阶

但这个函数并不是可以扩展或通用的。 虽然可以使用 any 解决通用性问题,但那就失去了定义应该返回那种类型的能力,并且也使编译器失去了类型保护的作用。...T 代表 Type,在定义泛型时通常用作第一个类型变量名称,它可以用任何有效名称代替。...一个被现有类或接口合并的类或者接口的声明可以为现有类型参数引入默认类型 一个被现有类或接口合并的类或者接口的声明可以引入新的类型参数,只要它指定了默认类型 # 泛型条件类型 条件类型可以根据某些条件得到不同的类型...= UnPromisifytypeof personPromise>; // Person # 泛型工具类型 # Partial Partial 用于将某个类型里的属性全部变为可选项 ?...定义 type ReturnTypeargs: any) => any> = T extends (...args: any) => infer R ?

73520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Typescript 高级用法以及项目实战问题

    泛型名 extends 类型 泛型条件 上面提到 extends,其实也可以当做一个三元运算符,如下: T extends U?...此时返回的 T,是满足原来的 T 中包含 U 的部分,可以理解为 T 和 U 的「交集」。 所以,extends 的语法格式可以扩展为 泛型名A extends 类型B ?...类型C: 类型D 泛型推断 infer infer 的中文是“推断”的意思,一般是搭配上面的泛型条件语句使用的,所谓推断,就是你不用预先指定在泛型列表中,在运行时会自动判断,不过你得先预定义好整体的结构...,使用了infer对应的type type Three = Foo void}> // () => void,泛型定义是参数的子集,同样适配 infer用来对满足的泛型类型进行子类型的抽取......args: any) => infer R ?

    1.9K50

    如何进阶TypeScript功底?一文带你理解TS中各种高级语法

    unknown 所以暂时这里使用any 代替 new(...args: unknown[]): T; } function getInstance(Clazz: IPerson) {...当泛型出现在接口内部时,比如第二个例子中的 IPerson接口代表一个函数,接口本身并不具备任何泛型定义。而接口代表的函数则会接受一个泛型定义。...我们先来看看如何使用它: interface IHasLength { length: number; } // 利用 extends 关键字在声明泛型时约束泛型需要满足的条件 function...其次我们在 MyParameters 内部对于 传入的泛型参数进行了条件判断,如果满足条件也就是 T extends ( ...args: infer R ) => any,需要注意的是条件判断中函数的参数并不是在类型定义时就确认的...那么此时我会返回满足条件的函数推断参数组成的数组也就是 ...args 的类型 R ,否则则返回 never 。

    2.1K10

    TypeScript的另一面:类型编程

    这一块对代码的功能层面没有任何影响,即使你一行代码十个any,遇到类型错误就@ts-ignore,代码该咋样还是咋样。...正文部分包括: 泛型基础 索引类型 & 映射类型 条件类型 & 分布式条件类型 infer 关键字 类型守卫 与 is、 in 关键字 内置工具类型原理 内置工具类型的增强 更多通用工具类型 泛型 Generic...为什么会有条件类型?可以看到通常条件类型通常是和泛型一同使用的,联想到泛型的使用场景,我想你应该明白了些什么。...当ReturnType被调用,泛型T被实际类型填充,如果T满足条件类型的约束,就返回R的值,在这里R即为函数的返回值实际类型。...实际上为了严谨,应当约束泛型T为函数类型,即: type ReturnTypeargs: any) => any> = T extends (...args: any) =

    1.7K20

    TypeScript进阶 之 重难点梳理

    我们可以理解为&表示必须同时满足所有的契约。|表示可以只满足一个契约。...在 ts 中,「extends 关键字既可以来扩展已有的类型,也可以对类型进行条件限定」。在扩展已有类型时,不可以进行类型冲突的覆盖操作。...理论上,任何运行时的符号名想要为类型系统所用,都要加上 typeof。 在使用class时,class名表示实例类型,typeof class表示 class本身类型。...说白了,「泛型就是不预先确定的数据类型,具体的类型在使用的时候再确定的一种类型约束规范」。 泛型可以应用于 function、interface、type 或者 class 中。...但是注意,「泛型不能应用于类的静态成员」 几个简单的例子,先感受下泛型 function log(value: T): T { console.log(value); return

    3.9K20

    精读《Typescript infer 关键字》

    我们无法用泛型来描述这种类型推导,因为泛型类型是一个整体,而我们想要返回的是入参其中某一项,我们并不能通过类似 T[0] 的写法拿到第一项类型: function xxx(...args: T[]...设计角度理解 infer 从类型推导功能来看,泛型功能非常强大,我们可以用泛型描述调用时才传入的类型,并提前将它描述在类型表达式中: function xxx(value: T): { result...R[0] : never 可以理解为,如果此时 T 满足 (...args: any) => any 这个结构,同时我们用 infer R 表示 R 这个临时变量指代第一个 any 运行时类型,那么整个函数返回的类型就是...any 之类的任何类型。...总结 infer 关键字让我们拥有深入展开泛型的结构,并 Pick 出其中任何位置的类型,并作为临时变量用于最终返回类型的能力。

    83040

    TS扫盲大法-基础篇

    通常我们在项目中经常看到封装的工具函数中有泛型,那么我们可以简单的写个,具体可以看下下面简单的一个一个工具请求函数 /*** * * 方法泛型 */ function genterFeachfunction getStrArr2([a, b, c]: strVal) { console.log(a, b, c); } getStrArr2(strArr); // ok 泛型 对于泛型在笔者初次遇见她时...,还是相当陌生的,感觉这词很抽象,不好理解,光看别人写的,一堆泛型,或许增加了阅读代码的复杂度,但是泛型用好了,那么会极大的增加代码的复用度。...: any) => any> = T extends (...args: any) => infer R ?...,可以在接口,函数,type使用泛型,泛型可以理解js中的形参,更加抽象和组织代码 3、extends约束泛型,并且可以在ts中做条件判断 4、使用keyof获取对象属性key值,如果需要获取一个对象定义的

    1.1K10

    【TypeScript 4.5】007-第 7 章 类型操纵

    、typeof 类型操作符、索引访问类型、条件类型、映射类型、模板字面量类型 二、泛型-HelloWorld 1、概述 软件工程的一个主要部分是建立组件 它们不仅有定义明确和一致的 api 还可以重复使用...function identity(arg: any): any { return arg } 代码示例三 完美,与代码示例一类型精确度一样!...) return arg; } 四、泛型-泛型类型 1、概述 说明 如何通过给一个变量设置这个函数的泛型类型 就需要使用泛型类型或泛型接口 代码示例 interface GenericIdentityFn...(x, y) { return x + y } 六、泛型-泛型约束 1、概述 说明 用户调用函数传入参数的时候就告诉其所传入参数必须具有的属性 代码示例 function loggingIdentity...100 : "111") 十三、条件类型约束 1、概述 说明 通常条件类型中的检查会给我们提供一些新的信息 就像我们使用类型守卫缩小范围一样 可以给我们一个更具体的类型 条件类型的真正分支将通过我们的检查类型进一步约束泛型

    3900

    掌握 TypeScript:20 个提高代码质量的最佳实践

    最佳实践16:使用泛型 泛型是 TypeScript 的一个强大特性,可以让你编写可以与任何类型一起使用的代码,从而使其更具有可重用性。...泛型允许你编写一个单独的函数、类或接口,可以与多种类型一起使用,而不必为每种类型编写单独的实现。...例如,你可以使用泛型函数来创建任何类型的数组: function createArray(length: number, value: T): Array { let result =...result; } let names = createArray(3, "Bob"); let numbers = createArray(3, 0); 你也可以使用泛型来创建一个可以处理任何类型数据的类...基于其他类型的条件创建新类型。 例如,可以使用条件类型来提取函数的返回类型: type ReturnType = T extends (...args: any[]) => infer R ?

    4.2K30
    领券