【TypeScript】TS接口interface类型(三)

这篇具有很好参考价值的文章主要介绍了【TypeScript】TS接口interface类型(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


【TypeScript】接口interface类型(三)


【TypeScript】TS接口interface类型(三),TypeScript实践应用,typescript,ubuntu,javascript

一、前言

TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。 在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。

二、语法定义

语法:使用 interface 关键字开头,定义类型对象,其中可以包含字符串和函数类型

典型的定义与使用参考下面:

interface Person {
  name: string;
  age: number;
  sayHi(): void;
}

const person: Person = {
  name: "Alice",
  age: 30,
  sayHi() {
    console.log(`Hi, my name is ${this.name} and I'm ${this.age} years old.`);
  }
};

三、具体使用及规则限制
3.1 可选属性

接口里的属性不全都是必需的。 有些是只在某些条件下存在,或者根本不存在。 可选属性在应用“option bags”模式时很常用,即给函数传入的参数对象中只有部分属性赋值了。

下面我们来给Person定义一个接口,其中有些属性是可选的

interface Person {
    name: string,
    age: number,
    studentNo?: string
}

let persn1: Person = {
    name: 'suwu150',
    age: 24,
    studentNo: '13240124'
}
let person2: Person = {
    name: 'suwu150',
    age: 24,
}

以上就是一个可选属性的添加,studentNo这个属性可以有,也可以不用赋值。我们编译后,能够看到如下结果:
【TypeScript】TS接口interface类型(三),TypeScript实践应用,typescript,ubuntu,javascript
这个Person接口,也能作为参数传递给函数使用,其中也能按照可选参数进行处理。

3.2 只读属性

有时候我们需要指定一个属性只能在定义的时候赋值,其他情况下只能读取,不能再次修改,那就需要处理为只读属性。
可以通过在属性名前添加 readonly 关键字来指定只读属性,只读属性只能在创建的时候对其赋值,一旦创建完成,就再也不能更改

语法:readonly + 属性名

interface Person {
  readonly name: string,
      age: string
}

let person: Person = {
  name: 'suwu150',
  age: 28
};

person.name = '张三'; // Cannot assign to 'name' because it is a read-only property. 
person.age = 30;

编译器中编译运行,会发现

  • age 能够正常赋值,不会提示错误
  • name报错,提示是只读属性,不能够再次赋值

【TypeScript】TS接口interface类型(三),TypeScript实践应用,typescript,ubuntu,javascript

3.3 可索引的类型

可索引类型具有一个_索引签名_,它描述了对象索引的类型,还有相应的索引返回值类型。

  • 描述通过索引获取的元素或属性,形如 Score[0]、Score[‘name’]

简单看下索引值定义的🌰例子:

interface Score {
 [index: number]: number          
}

let score: Score = [23,65,99,20];

console.log(score);
console.log(score[2]);

我们定义了Score接口,具有索引签名。
以上表示当用 number 去索引 Score 接口时,会返回结果为number类型的值。

需要注意的是TypeScript支持两种索引签名: 字符串数字。下面来看看使用数字索引和字符串索引的结果。

interface Person {
 [key: number]: number          
}

interface Student {
 [key: number]: string          
}

let person: Person = [23,65,99,20];
let student: Student = ['23','65','99','20'];

console.log(person);
console.log(student)
console.log(person[2]);
console.log(person['2']);
console.log(student[2]);
console.log(student['2']);

从上面的结果能够看出,字符串和数字获取到的是同一个值,这是因为当使用 number来索引时,JavaScript会将它转换成string然后再去索引对象。

3.4 函数类型

接口能够描述JavaScript中对象拥有的各种各样的外形。 除了描述带有属性的普通对象外,接口也可以描述函数类型。

为了使用接口表示函数类型,我们需要给接口定义一个调用签名。 它就像是一个只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型。

函数类型使用语法:

interface 接口名 {
  (参数名): 返回值;
}

可以看看简单的接口中使用函数类型的实例

interface SetName {
  (newName: string): string;
}

let setname: SetName;
setname = (name: string) => {
    console.log(name);
    return name
};

setname('new suwu150');

编译运行看看:

【TypeScript】TS接口interface类型(三),TypeScript实践应用,typescript,ubuntu,javascript

在使用函数类型类型时,需要注意定义的参数名可以不一致,但参数类型得保持一致。

3.5 类类型

类类型是TypeScript中比较常规的一种类型,接口的使用也离不开类类型的使用。
和其他静态编译语言中类似,TypeScript也能够用它来明确的强制一个类去符合某种契约。

interface Person {
  name: string
}

class Student implements Person {
  name = '';
  constructor(h: number, m: number) { }
}

以上就是一个典型的类类型的接口的使用,如果我们不在Student中初始化name,则会在编译阶段提示属性缺失
【TypeScript】TS接口interface类型(三),TypeScript实践应用,typescript,ubuntu,javascript
同样的,不仅仅在接口中能够实现属性的定义,也能够定义方法。




以上就是TypeScript接口类型介绍,希望喜欢的同学点赞加收藏,谢谢。

文章来源地址https://www.toymoban.com/news/detail-627539.html


到了这里,关于【TypeScript】TS接口interface类型(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【TypeScript】TS条件类型(十)

    🐱 个人主页: 不叫猫先生 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏:vue3从入门到精通、TypeScript从入门到实践 📢 资料领取:前端进阶资料以及文中源

    2023年04月11日
    浏览(46)
  • 【TypeScript】TS类型声明(二)

    🐱个人主页: 不叫猫先生 🙋‍♂️作者简介:前端领域新星创作者、华为云享专家、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏:vue3从入门到精通、TypeScript从入门到实践 📝个人签名:不破不立 TypeScript从入门到实践专栏 是博

    2024年01月20日
    浏览(43)
  • 【TypeScript】TS类型守卫(六)

    🐱个人主页: 不叫猫先生 🙋‍♂️作者简介:前端领域优质创作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏:vue3从入门到精通、TypeScript从入门到实践 📝个人签名:不破不立 📢资料领取:前端进阶资料以及文中源码可以

    2024年02月22日
    浏览(45)
  • TypeScript 中【class类】与 【 接口 Interfaces】的联合搭配使用解读

    导读 : 前面章节,我们讲到过 接口(Interface)可以用于对「对象的形状(Shape)」进行描述。 本章节主要介绍接口的另一个用途,对类的一 部分行为进行抽象。 类配合实现接口 实现( implements )是面向对象中的一个重要概念。 一般来讲,一个类只能继承自另一个类 ,但

    2024年02月14日
    浏览(38)
  • TypeScript基础篇 - TS日常类型 上篇

    目录 TS的常见用法介绍  example01.ts 逃避类型检查:any 思考一下~:不知道类型 类型标注 函数(参数和返回值) 匿名函数 TS如何知道匿名函数的类型? TS是一种标注式语言,不侵入JS的设计 文章内容 基础类型、数组 any/unkown 类型标注 函数 对象类型 联合 别名 接口 断言 字面

    2024年02月16日
    浏览(58)
  • 【TypeScript】TS类型断言-类型的声明和转换(五)

    🐱个人主页: 不叫猫先生 🙋‍♂️作者简介:前端领域新星创作者、华为云享专家、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏:vue3从入门到精通、TypeScript从入门到实践 📝个人签名:不破不立 📢资料领取:前端进阶资料以

    2024年02月22日
    浏览(38)
  • Typescript - 通俗易懂的 interface 接口,创建接口 / 基础使用 / 可选属性 / 只读属性 / 任意属性(详细教程)

    在面向对象语言中,接口是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类去实现。 TypeScript 中的接口是一个非常灵活的概念,除了可用于 对类的一部分行为进行抽象 以外,也常用于对「对象的形状(Shape)」进行描述。 ​TypeScript 的核心原则之一是对值所

    2023年04月15日
    浏览(50)
  • 前端TypeScript学习day03-TS高级类型

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)            目录 TypeScript 高级类型 class 类 class继承  extends implements  类成员可见性  public  protected  private   readonly 兼容性 类型兼容性 接口兼容性  函数兼容性  TypeScri

    2024年02月08日
    浏览(37)
  • 前端TypeScript学习day02-TS常用类型

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 TypeScript 常用类型 接口  元组  类型推论 类型断言 字面量类型 枚举 any 类型 typeof  当一个对象类型被多次使用时,一般会使用接口(interface)来描述对象的类型,达到

    2024年02月08日
    浏览(52)
  • TypeScript必知三部曲(一)TypeScript编译方案以及IDE对TS的类型检查

    TypeScript代码的编译过程一直以来会给很多小伙伴造成困扰,typescript官方提供tsc对ts代码进行编译,babel也表示能够编译ts代码,它们二者的区别是什么?我们应该选择哪种方案?为什么IDE打开ts项目的时候,就能有这些ts代码的类型定义?为什么明明IDE对代码标红报错,但代码

    2023年04月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包