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

TypeScript中泛型及泛型函数、泛型类、泛型接口,泛型约束,一文读懂

最近在学TypeScript,然后整理了一下关于TypeScript中泛型的一些笔记。...定义函数或方法是的参数是形参,调用此函数或方法时传递的参数值是实参。 泛型一般用来处理多个不同类型参数的方法。就是在方法中传入通用的数据类型,使多个方法合并成一个。...在使用过程中,泛型操作的数据类型会根据传入的类型实参来确定 泛型可以用在 类、接口、方法中,分别被称为 泛型类、泛型接口、泛型方法。...T 必须放在中间 一般不能单独出现,会出现在类 函数、 接口 、中 ,在函数体内,编译器不知道泛型变量T具体数据类型,只能认为其为 任意值(any) 类型 泛型约束 泛型参数T类似于any类型...但是有些情况下,函数需要处理的数据有一定的约束,比如有一个泛型函数需要访问泛型参数T的length属性,并加1。基于这种需求,必须对泛型参数T进行约束,也就是泛型约束。

2.8K30

TypeScript:一个好泛型的价值

所谓 泛型(Generics) 的概念就是该行为的另一个例子,只是,这次我们不诉诸宏大,而是在代码层面的细枝末节中试图找出并描绘上述的模式。 且听我细细道来…… 何为泛型?...TypeScript 泛型来拯救 正如我曾 尝试 说的那样:一个泛型就像若干类型的一个变量,这意味着我们可以定义一个表示任何类型的变量,同时能保持住类型信息。后者是关键,因为那正是 any 做不到的。...图片中两件事情值得注意: 我直接在函数名之后(在 之间)指定了类型。在本例中,由于函数签名足够简单,我们其实可以省略这部分来调用函数而编译器将会从所传参数推断出类型。...] } 这就对了,我们现在有了两个泛型,后一个被声明为继承自前一个中的键,但本质上的好处是你现在不再受限于某一种具体类型(即 Person 类型的对象) 了,该函数可被你放心大胆地用于任何类型或结构了...这是因为借助泛型,处理类逻辑完全被封装进了一个泛型类中,从而我们可以约束类型并创建指定类型的类,这样的类只对动物类型生效。你也可以在此添加额外的行为,而类型信息也得以保留。

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

    现代C++编程实践(四)—手动撸一个泛型分割函数

    1 实现一个泛型分割函数 熟悉Java、C#以及Python的人都知道,在字符串处理时有一个split函数,非常有用,尤其在使用文件接口时,对方按照协议将内容以一定格式保存到文件中,我们要做的就是读取文件并解析文件...2 分割函数实现分析 在上面的实现中,split函数使用std::find查找分隔符的位置并使用sliceEnd保存当前迭代器的位置,然后使用while循环保证所有遍历完所有的字符串。...binFunc函数实现了将被分割的字符串重新构建成一个string并返回。这样在split函数中,就可以被保存在outIt中。...outIt在实际调用时我们传入实际上一个迭代器,通过调用std::back_inserter接口。每次都会将binFunc返回的字符串插入容器中。这样,我们就实现了将字符串进行分割并保存。...下面给出一个不使用默认参数的代码的例子。这个例子实现了容器元素的遍历并打印。

    18320

    【C++】泛型编程 ⑨ ( 类模板的运算符重载 - 函数声明 和 函数实现 写在同一个类中 | 类模板 的 外部友元函数问题 )

    类模板 的 函数声明 与 函数实现 都写在同一个类中 ; 类模板 的 函数实现 在 类外部进行 , 写在相同的 .h 和 .cpp 源码文件中 ; 类模板 的 函数实现 在 类外部进行 , 写在不同的...函数声明 和 函数实现 写在同一个类中 下面的类是一个 普通类 , 其中定义了 成员变量 和 成员方法 ; 并为其重载了 左移运算符 和 加法运算符 ; 其中 加法运算符 重载 是在 类内部实现的 ,...三、类模板的运算符重载 - 函数声明 和 函数实现 写在同一个类中 1、类模板 的 外部友元函数问题 将上述 " 普通类的运算符重载 - 函数声明 和 函数实现 写在同一个类中 " 示例改造成 类模板...示例 ; 问题就出现在 定义在外部的 友元函数 中 , 友元函数 , 不能 读取 和 访问 到 泛型类型 T , 也就是 类模板 中 的 template 泛型类型 T ; 在外部重新定义...template 就是重新定义了一个新的泛型 , 与 类模板 中的 T 不是同一个泛型类型 ; 解决上述问题 , 就需要将 友元函数 定义在 类模板 的内部 ; template

    27210

    TypeScript 基础学习笔记:泛型 <T> vs 断言 as

    今天,我们将深入探讨两个核心概念——泛型(Generics) 和 类型断言(Type Assertions),并通过实战代码示例,揭示它们之间的区别。...泛型 :灵活多变的类型容器 泛型是 TypeScript 提供的一种编写可重用代码的机制,它允许我们在定义函数、接口或类的时候不预先指定具体的类型,而是在使用时根据实际情况指定。...泛型 在 reactive 中的应用 在Vue 3中,reactive 是一个关键的API,用于创建响应式对象。...'; // 正确 user.age = 'thirty'; // 错误,TypeScript会提示类型不匹配 在这个例子中, 是泛型参数,它告诉 reactive 函数内部的对象应当遵循 User...泛型与类型断言的区别总结 泛型 在 reactive 中主要用于定义响应式对象的预期类型结构,提供静态类型检查和代码补全,是编写类型安全代码的基础。

    27210

    深入学习下 TypeScript 中的泛型

    在今天的内容中,我们将尝试 TypeScript 泛型的真实示例,并探索它们如何在函数、类型、类和接口中使用。...,该函数遍历keys数组并使用数组中指定的键创建一个新对象。...如果仔细查看您的函数,您会发现参数列表或 TypeScript 能够推断其值的任何其他地方都没有使用泛型。这意味着调用代码在调用您的函数时必须显式传递此泛型的类型。...对于这种情况,使用映射类型可以重用初始类型形状并减少应用程序中的重复代码。在 TypeScript 中,这种结构被称为映射类型并依赖于泛型。在本节中,您将看到如何创建映射类型。...现在评估结束,TypeScript 返回您要使用的新类型,并省略嵌套字段。结论在本教程中,我们探索适用于函数、接口、类和自定义类型的泛型,以及使用了泛型来创建映射类型和条件类型。

    17910

    深入学习下 TypeScript 中的泛型

    在今天的内容中,我们将尝试 TypeScript 泛型的真实示例,并探索它们如何在函数、类型、类和接口中使用。...,该函数遍历keys数组并使用数组中指定的键创建一个新对象。...如果仔细查看您的函数,您会发现参数列表或 TypeScript 能够推断其值的任何其他地方都没有使用泛型。这意味着调用代码在调用您的函数时必须显式传递此泛型的类型。...对于这种情况,使用映射类型可以重用初始类型形状并减少应用程序中的重复代码。 在 TypeScript 中,这种结构被称为映射类型并依赖于泛型。在本节中,您将看到如何创建映射类型。...现在评估结束,TypeScript 返回您要使用的新类型,并省略嵌套字段。 结论 在本教程中,我们探索适用于函数、接口、类和自定义类型的泛型,以及使用了泛型来创建映射类型和条件类型。

    39K30

    《现代Typescript高级教程》泛型和类型体操

    泛型(Generics) 1. 泛型函数 泛型函数允许我们在函数定义中使用类型参数,以便在函数调用时动态指定类型。...通过显式传递泛型参数,我们可以确保在函数调用时指定了具体的类型。 2. 泛型接口 泛型接口允许我们在接口定义中使用类型参数,以便在实现该接口时指定具体的类型。...泛型类 泛型类允许我们在类定义中使用类型参数,以便在创建类的实例时指定具体的类型。...我们还可以结合泛型和内置泛型函数来实现更复杂的类型操作。以下是一个示例,展示了如何使用 Pick 和泛型来创建一个函数,该函数从给定对象中选择指定属性,并返回一个新的对象。...通过结合泛型、extends 关键字、内置泛型函数和其他高级类型概念,我们能够在 TypeScript 中编写更复杂、类型安全的代码,并利用 TypeScript 的强大类型系统来提高代码的可读性、可维护性和可扩展性

    38030

    深入浅出TypeScript | 青训营笔记

    泛型 1. 什么时候需要泛型 2. 泛型是什么 泛型(Generics)是一种参数化类型的机制,可以让我们在定义函数、类和接口时,使用一个或多个类型作为参数来指定其返回值或成员的类型。...然后就可以在函数内部或类/接口成员的声明中使用这个泛型类型了。 3....我们定义了一个泛型函数 reverse,它接受一个类型为 T 的数组参数,并返回一个类型为 T 的数组。...使用推断类型的方式调用这个函数时,TypeScript 会自动根据传入参数的类型推导出泛型类型 T 的具体类型。...需要注意的是,在使用泛型时,我们还可以对泛型类型参数进行约束,以限制它们只能是某个特定类型或其子类型。

    8410

    【C++】泛型编程 ⑩ ( 类模板的运算符重载 - 函数实现 写在类外部的同一个 cpp 代码中 | 类模板 的 外部友元函数二次编译问题 )

    将 类模板 函数声明 与 函数实现 分开进行编码 , 有 三种 方式 : 类模板 的 函数声明 与 函数实现 都写在同一个类中 , 也就是没有分开进行编码 ; 类模板 的 函数实现 在 类外部进行 ,...( 类模板的运算符重载 - 函数声明 和 函数实现 写在同一个类中 | 类模板 的 外部友元函数问题 ) 实现了第一种情况 , 类模板 的 函数声明 与 函数实现 都写在同一个类中 , 也就是没有分开进行编码...访问 构造函数 , 并实现该函数 , 使用域操作符 时 , 前面的类 需要指定 具体的泛型类型 , 这里使用 声明的 T 模板类型 作为 具体的 泛型类型 ; template ...友元函数 不是 类中的函数 , 是 类外部的函数 , 友元函数 中又用到了 泛型 T , 说明这是一个 模板函数 ; 友元函数 是 全局函数 , 不属于 类模板 , 不要使用 域操作符 访问友元函数...泛型类型 指明 , 在 函数名称后面 , 使用 注明泛型类型 , 但是在 类模板 声明 友元函数 时 , 就需要指定 泛型类型 ; 这样才能将 类模板中的 泛型 T , 与 友元函数在 外部实现时

    23410

    【TypeScript】类型推断

    当我们在TypeScript中声明变量但没有明确指定其类型时,TypeScript会尝试根据变量的值进行类型推断。这样可以帮助我们避免手动指定所有类型,使代码更简洁,同时也提供了更好的类型安全性。...函数返回值类型推断function add(a: number, b: number) { return a + b;}在这个例子中,函数add的返回值没有显式地指定类型,但TypeScript会根据函数体中的....`;}let john = { name: "John", age: 30 };let greeting = greet(john);在函数greet的参数中,我们没有明确指定类型,而是使用了一个匿名对象字面量类型...使用泛型推断function identity(arg: T): T { return arg;}let result = identity("hello");在这个例子中,函数identity...使用了泛型T,当我们调用identity("hello")时,TypeScript会根据传入的参数类型推断泛型类型为string,因此result变量的类型也是string。

    41200

    TypeScript 中的泛型

    它接受一个参数 arg 和返回值都是泛型类型 T。在使用时,可以通过尖括号 明确指定泛型类型。第一个调用指定了 string 类型,第二个调用指定了 number 类型。2....Box("TypeScript");console.log(stringBox.getValue()); // 输出: TypeScript解析: 在这个例子中,Box 是一个泛型类,使用...构造函数和方法都可以使用泛型类型 T。通过实例化 Box,我们创建了一个存储字符串的 Box 实例,并通过 getValue 方法获取了存储的值。4....函数 defaultValue 接受一个泛型参数 T,并给它设置了默认类型为 string。在使用时,如果没有显式指定类型,会使用默认类型。...在例子中,第一个调用中 result1 推断为 string 类型,第二个调用中 result2 推断为 number 类型。我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

    14710

    十分钟教你理解TypeScript中的泛型

    TypeScript里的泛型是个啥 在TypeScript中,泛型是一种创建可复用代码组件的工具。这种组件不只能被一种类型使用,而是能被多种类型复用。...理解中心思想 刚才使用any类型导致的问题,可以用TypeScript中的泛型来解决。其中心思想是类型安全。使用泛型,你可以用一种编译器能理解的,并且合乎我们判断的方式,指定类、类型和接口的实例。...这是因为,TypeScript现在可以从指定的泛型类型推断出001不是字符串。在T出现的地方,就可以使用string类型,这就实现了类型安全。...使用泛型,许多属性的类型都能被TypeScript推断出来,然而,在某些TypeScript不能做出准确推断的地方,它不会做任何假设。...泛型是一个很棒的概念,可以帮助我们在JavaScript中,更好地控制输入和输出。请快乐地编码吧!

    2.2K10

    【100个 Unity实用技能】☀️ | C#泛型集合常用方法,查找符合要求的第一个元素并返回

    未来很长,值得我们全力奔赴更美好的生活✨ ------------------❤️分割线❤️------------------------- ---- Unity 实用小技能学习 C#泛型集合常用方法...,查找符合要求的第一个元素并返回 之前写了一篇文章介绍了在List中查找第一个元素并返回的文章: 【100个 Unity实用技能】| C#中List.Find 方法详解 查找符合要求的第一个元素并返回...几种方法如下: 1、list.Find(t => t == 666); 不会遍历所有记录,它只需遇到指定的 predicate 满足后即可返回。...取序列中满足条件的第一个元素,如果没有元素满足条件,则返回默认值(对于可以为null的对象,默认值为null,对于不能为null的对象,如int,默认值为0),可以在IEnemerable上使用。...在常用的方法中根据实际情况才用上面几种方法即可。 因为Find方法不会遍历所有记录,找到第一个后立刻返回,但缺点是只能在List中使用。

    87020

    关于TypeScript中的泛型,希望这次能让你彻底理解

    泛型,让函数的逻辑和类型更匹配 在软件开发中,我们常常需要编写一些根据特定属性筛选数组元素的函数。...在 React 中的应用 在React开发中,状态管理是一个核心概念,尤其是在使用函数组件和Hooks的时候。...TypeScript中的类型推断 TypeScript有一个令人惊叹的特性——它会尝试从上下文中推断出类型,只要有可能。...target); } 如果你是初学者,你可能会这样使用它: identifyType(5); 但是,TypeScript可以从你作为第一个参数传递的值中推断出泛型的类型,最好是这样使用:...结束 在我们今天的旅程中,我们一起探索了TypeScript中那些令人兴奋的泛型知识。从类型推断的便捷性到泛型在日常编程中的灵活运用,希望这些内容能够帮助你解开围绕泛型的所有迷雾。

    17210

    《现代Typescript高级教程》枚举和泛型

    现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 枚举和泛型 接下来我们将学习TypeScript 中的两个重要主题:枚举(Enums)和泛型(Generics)。...在 TypeScript 中,泛型(Generics)是一种强大的类型工具,它允许我们编写可重用、灵活和类型安全的代码。...泛型允许我们在定义函数、类或接口时使用类型参数,这些类型参数在使用时可以被动态地指定具体的类型。 以下是泛型在 TypeScript 中的几个常见应用场景: 1....通过在函数调用时显式指定类型参数为number,我们可以将42传递给identity函数并推断出结果的类型为number。 2. 接口泛型 接口泛型允许我们创建可适用于不同类型的接口定义。...泛型在 TypeScript 中广泛应用于函数、类、接口和类型别名的定义中,它提供了一种灵活、类型安全且可重用的方式来处理不同类型的数据。

    23810

    什么是TS类型保护、泛型

    在这个例子中,x is Dog 是一个类型保护,它告诉TypeScript编译器,如果 isDog 函数返回 true,那么 x 一定是 Dog 类型。...通过使用泛型,可以创建可重用的组件,这些组件可以适应多种数据类型,而无需为每种数据类型都重新编写代码。1、定义泛型泛型是通过在类型或函数名后面添加尖括号()和类型参数来定义的。...类型推断在调用泛型函数或实例化泛型类时,TypeScript编译器会尝试根据提供的参数来推断类型参数。如果编译器无法推断出类型参数,可能需要显式地指定它们。...泛型约束可以使用extends关键字为泛型类型参数添加约束。这允许指定类型参数必须满足的接口或类型。...};默认泛型类型在TypeScript 2.3及更高版本中,可以为泛型类型参数提供默认类型//接受两个参数:length(表示数组的长度)和 value(表示数组中每个元素的值)function Arr

    8910

    《现代Typescript高级教程》类型推断

    `); } greet("John"); // person的类型推断为string 在上面的示例中,函数greet的参数person的类型被推断为string,因为在函数调用时传入的实参是一个字符串...类型断言 如果我们希望手动指定一个变量或表达式的类型,可以使用类型断言(Type Assertion)来告诉TypeScript我们的意图。...类型推断和泛型 在使用泛型时,TypeScript会根据传入的参数类型推断泛型类型的具体类型。...; // result的类型推断为string 在上面的示例中,泛型函数identity的参数value的类型被推断为传入的实参 类型,因此返回值的类型也被推断为string。...总结 类型推断是TypeScript中的一个重要特性,通过自动推导变量和表达式的类型,可以提高代码的可读性和可维护性。

    19030
    领券