iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >TypeScript中的接口和泛型是什么
  • 781
分享到

TypeScript中的接口和泛型是什么

2023-06-29 12:06:17 781人浏览 安东尼
摘要

这篇文章给大家分享的是有关typescript中的接口和泛型是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。接口使用 interface 关键字来定义数据类型对象类型当存在于较长的数据类型约束时,我们可以通过

这篇文章给大家分享的是有关typescript中的接口和泛型是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

接口

使用 interface 关键字来定义数据类型

对象类型

当存在于较长的数据类型约束时,我们可以通过 type 关键字 为类型注解起别名,也可以通过接口来定义

type UserType = { name: string; age?: number };const user: UserType = {  name: "kiki",  age: 18,};interface IUserType { name: string; age?: number }const person: IUserType = {  name: 'alice',  age: 20}

索引类型

interface 和type定义对象都可以为只知道key的类型,不知道具体 key 值的时候,进行类型的定义

interface ILanguage {  [index: number]: string;}const language: ILanguage = {  0: "html",  1: "CSS",  2: "js",};type Score = {  [name: string]: number;}const score: Score = {  Chinese: 120,  math: 95,  Englist: 88,};

函数类型

定义函数时,interface 和 type 的语法稍有不同

interface ISelfType {  (arg: string): string;}type LogType = (arg: string) => string;function print(arg: string, fn: ISelfType, logFn: LogType) {  fn(arg);  logFn(arg);}function self(arg: string) {  return arg;}console.log(print("hello", self, self));

继承

接口可以实现多继承,继承后的接口具备所有父类的类型注解

interface ISwim {  swimming: () => void;}interface IEat {  eating: () => void;}interface IBird extends ISwim, IEat {}const bird: IBird = {  swimming() {},  eating() {},};

交叉类型

交叉类型其实是与的操作,用 & 符号,将接口进行与操作后,实质上需要满足所有与操作接口的类型注解

interface ISwim {  swimming: () => void;}interface IEat {  eating: () => void;}type Fish = ISwim | IEat;type Bird = ISwim & IEat;const fish: Fish = {  swimming() {},};const bird: Bird = {  swimming() {},  eating() {},};export {}

接口实现

接口可以通过类使用 implements 关键字来实现,类只能继承一个父类,但是可以实现多个接口

interface ISwim {  swimming: () => void}interface IEat {  eating: () => void}class Animal {}class Fish extends Animal implements ISwim, IEat {  swimming(){}  eating(){}}class Person implements ISwim {  swimming(){}}function swiMaction(iswim: ISwim){  iswim.swimming()}swimAction(new Fish())swimAction(new Person())

没有实现接口的类,自然是没有该接口中的方法

TypeScript中的接口和泛型是什么

interface 和 type 的区别

很多时候 interface 和 type 是相同的,但有一个明显区别在于 interface 可以重复定义,类型注解会累加,而 type 重复定义会报错

TypeScript中的接口和泛型是什么

字面量赋值

直接把字面量赋值类型给变量时,会对字面量进行类型推导,多出的属性会报错

TypeScript中的接口和泛型是什么

但是将对象的引用赋值的话,会进行 freshness 擦除操作,类型检测时将多余的属性擦除,如果依然满足类型就可以赋值

TypeScript中的接口和泛型是什么

枚举类型

枚举类型通过 enum 关键字来定义,它和联合类型实现的功能类似,但是枚举类型的代码阅读性会更强一些

enum Direction {  LEFT,  RIGHT,  TOP,  BOTTOM,}function turnDirection(direction: Direction) {  switch (direction) {    case Direction.LEFT:      break;    case Direction.RIGHT:      break;    case Direction.TOP:      break;    case Direction.BOTTOM:      break;    default:      const foo: never = direction;      break;  }}turnDirection(Direction.LEFT);

泛型

泛型函数

当不确定入参的类型时,可以定义类型注解为泛型,使用的时候再指定具体类型,使用 <> 来进行泛型的定义。

function self<T>(element: T) {  return element;}self<string>("alice");self<number>(2);self<null>(null);

如果没有定义类型,ts会进行类型推导,有可能并不是我们希望的类型,如以下字符串推导出来不是”string“字符串类型,而是“hello”字面量类型。

TypeScript中的接口和泛型是什么

当存在多个参数时,在泛型中定义多个即可

function foo<T, E, O>(a: T, b: E, c: O){}foo(1, 'alice', false)foo(['alice'], undefined, null)

泛型接口

在接口中使用泛型,将类型注解写在接口名后

interface Person<T, E> {  name: T;  age: E;}const person: Person<string, number> = {  name: "alice",  age: 20,};

在接口中使用泛型是无法进行类型推导的,使用的时候必须指定具体的类型

TypeScript中的接口和泛型是什么

除非在接口定义的时候给泛型设置了默认值

interface Book<T = string, E = number> {  cateGory: T;  price: E;}const book: Book = {  category: "nature",  price: 88.6,};const dictionary: Book<number, string> = {  category: 1,  price: '88'}

泛型类

类中定义的方式,只是将具体的数据类型替换成了泛型,在类中是可以进行类型推导的

class Point<T> {  x: T;  y: T;  z: T;  constructor(x: T, y: T, z: T) {    this.x = x;    this.y = y;    this.z = z;  }}new Point("1.55", "2.34", "3.67");new Point(1.55, 2.34, 3.67);

类型约束

泛型可以通过继承来进行类型约束

只需要传入的参数满足泛型的条件,即有 length 属性

interface ILength {  length: number;}function getLength<T extends ILength>(element: T) {  return element.length;}getLength("alice");getLength(["alice", "kiki", "lucy"]);getLength({ length: 5 });

接口、枚举、泛型 这些类型在javascript都是没有的,但在TypeScirpt中都是非常重要的类型注解。

感谢各位的阅读!关于“TypeScript中的接口和泛型是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: TypeScript中的接口和泛型是什么

本文链接: https://www.lsjlt.com/news/324901.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • TypeScript中的接口和泛型是什么
    这篇文章给大家分享的是有关TypeScript中的接口和泛型是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。接口使用 interface 关键字来定义数据类型对象类型当存在于较长的数据类型约束时,我们可以通过...
    99+
    2023-06-29
  • typeScript 泛型使用和泛型接口结合
    目录1、泛型是啥?2、泛型类型3、泛型接口4、泛型类5、泛型约束6、泛型参数默认类型7、泛型条件类型typeScript 中新增的泛型概念、泛型使用、泛型与接口结合: 在实际应用中...
    99+
    2024-04-02
  • TypeScript中的接口和泛型你了解吗
    目录接口对象类型索引类型函数类型继承交叉类型接口实现interface 和 type 的区别字面量赋值枚举类型泛型泛型函数泛型接口泛型类类型约束总结接口 使用 interface 关...
    99+
    2024-04-02
  • typeScript泛型使用和泛型接口结合的方法
    这篇“typeScript泛型使用和泛型接口结合的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“typeScript泛型...
    99+
    2023-06-29
  • TypeScript接口与泛型全面精讲
    目录一、接口1. Interface 接口类型(1) 接口类型的基本使用(2) 可缺省属性(3) 只读属性(4) 定义函数类型(5) 索引签名2. Type 类型别名3. one q...
    99+
    2022-11-13
    TypeScript接口与泛型 TypeScript接口 TypeScript泛型
  • TypeScript中变量和接口的作用是什么
    本文小编为大家详细介绍“TypeScript中变量和接口的作用是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“TypeScript中变量和接口的作用是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。TS变...
    99+
    2023-06-05
  • TypeScript泛型参数的默认值是什么
    这篇文章主要介绍“TypeScript泛型参数的默认值是什么”,在日常操作中,相信很多人在TypeScript泛型参数的默认值是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”TypeScript泛型参数的...
    99+
    2023-07-02
  • golang接口是泛型吗
    golang接口不是泛型,其原因:虽然Golang的接口提供了一种类似泛型的机制,但它并非是完全的泛型。在泛型中,我们可以定义参数和返回值的具体类型,而Golang的接口并不能指定这些类型。这就意味着在使用接口时,我们需要进行一些类型转换和...
    99+
    2023-08-03
  • TypeScript中泛型怎么用
    这篇文章将为大家详细讲解有关TypeScript中泛型怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。泛型避免代码重复中,创建可重用的类型,是我们编写简洁代码重要的一...
    99+
    2024-04-02
  • TypeScript接口和类型的区别小结
    目录接口(interface)类型(type)interface vs type结论TypeScript 是由 Microsoft 开发的一种开源的编程语言。它是 JavaScrip...
    99+
    2023-05-20
    TypeScript接口和类型区别 TypeScript 接口 类型
  • C#泛型接口的协变和逆变
    1、什么是协变、逆变? 假设:TSub是TParent的子类。协变:如果一个泛型接口IFoo<T>,IFoo<TSub>可以转换为IFoo<TParen...
    99+
    2024-04-02
  • 泛型:嵌入在接口中的约束和结构
    php小编小新为您带来关于泛型的介绍。泛型是一种嵌入在接口中的约束和结构,它可以让我们在编写代码时更加灵活和高效。通过使用泛型,我们可以在编译时发现并解决类型错误,提高代码的可读性和可...
    99+
    2024-02-09
    overflow
  • golang中什么是泛型
    在golang中,泛型是程序设计语言的一种风格或范式,是指编写模板适应所有类型,只有在具体使用时才定义具体变量类型。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。本教程操作环境:wi...
    99+
    2023-05-14
    go语言 Golang 泛型
  • java中什么是泛型
    本篇文章给大家分享的是有关java中什么是泛型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程...
    99+
    2023-06-14
  • 怎么在java中使用泛型接口
    怎么在java中使用泛型接口?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的实...
    99+
    2023-06-14
  • TypeScript 02中的变量和接口有什么作用
    这篇文章主要介绍“TypeScript 02中的变量和接口有什么作用”,在日常操作中,相信很多人在TypeScript 02中的变量和接口有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方...
    99+
    2024-04-02
  • 泛型和元编程的模型是什么
    这篇文章主要介绍“泛型和元编程的模型是什么”,在日常操作中,相信很多人在泛型和元编程的模型是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”泛型和元编程的模型是什么”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-15
  • Rust的泛型和特性是什么
    这篇文章主要介绍了Rust的泛型和特性是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Rust是 Mozilla 的一个新的编程语言,专注于安全,尤其是并发安全,支持函数...
    99+
    2023-06-27
  • TypeScript接口和类型有哪些区别
    今天小编给大家分享的是TypeScript接口和类型有哪些区别,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。目录接口(interface)类型(type)interface vs t...
    99+
    2023-07-06
  • 在 TypeScript 中使用泛型的方法
    目录1. 泛型语法2. 在函数中使用泛型(1)分配泛型参数(2)直接传递类型参数(3)默认类型参数(4)类型参数约束3. 在接口、类和类型中使用泛型(1)接口和类中的泛型(2)自定义...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作