Typescript基础面试题 | 02.精选 ts 面试题

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 5. 什么是类型注解?为什么需要使用类型注解?
    • 6. 如何使用 interface 声明一个接口?
    • 7. 什么是类?如何创建一个类?
    • 8. 如何使用类的继承和多态?

5. 什么是类型注解?为什么需要使用类型注解?

类型注解是在 TypeScript 中用于指定变量、函数、类、接口等元素的类型的一种方式。它们是通过在代码中添加额外的类型信息来增强类型系统的功能。

使用类型注解的主要原因是为了提供更好的类型安全性和开发便利性。通过使用类型注解,您可以在代码中明确地指定变量、函数、类、接口等元素的类型,从而使编译器能够在编译过程中检查类型错误,并在运行时避免潜在的错误。

以下是使用类型注解的一些优点:

  1. 类型安全性:类型注解确保了代码中变量和函数的类型是正确的,从而避免了潜在的类型错误和运行时错误。
  2. 提高代码可读性:通过声明变量和函数的类型,您可以更好地理解代码的意图和功能,从而提高代码的可读性。
  3. 自动补全和代码提示:由于类型系统提供了类型信息,因此开发工具可以提供更好的自动补全和代码提示功能,帮助您更快地编写代码。
  4. 更好的代码重构:在大型项目中,随着需求的变化,您可能需要对代码进行重构。类型系统可以帮助您更轻松地进行代码重构,因为它确保了代码的正确性和可维护性。
  5. 更好的团队协作:在团队开发中,使用类型系统可以帮助团队成员更好地理解彼此的代码,从而提高团队协作效率。

总之,类型注解是 TypeScript 中非常重要的一个概念,它们可以提供更好的类型安全性和开发便利性,有助于提高代码的可读性、可维护性和可扩展性。

6. 如何使用 interface 声明一个接口?

在 TypeScript 中,您可以使用interface关键字声明一个接口。接口是一种契约,它定义了一个对象或类的形状(structure),即对象或类必须具有的属性和方法。

下面是一个使用interface声明接口的示例:

interface Person {name: string;age: number;sayHello: () => void;
}

在上述示例中,我们声明了一个名为Person的接口。该接口定义了一个名为name的字符串类型属性、一个名为age的数字类型属性和一个名为sayHello的方法,该方法没有返回值且没有参数。

您可以使用接口来定义类或对象的形状,并在其他类或对象中实现该接口。例如:

class Employee implements Person {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}sayHello() {console.log(`Hello, my name is ${this.name}`);}
}

在上述示例中,我们定义了一个名为Employee的类,它实现了Person接口。该类必须具有与接口定义相同的属性和方法,否则会触发类型错误。

您还可以使用接口来定义函数的形状。例如:

interfaceMathFunction {(x: number, y: number): number;
}
function add(x: number, y: number): number {return x + y;
}
function subtract(x: number, y: number): number {return x - y;
}const mathFunctions: MathFunction[] = [add, subtract];

在上述示例中,我们声明了一个名为MathFunction的接口,它定义了一个接受两个数字参数并返回一个数字的函数。然后,我们定义了两个名为addsubtract的函数,它们实现了MathFunction接口。最后,我们创建了一个名为mathFunctions的数组,其中包含了addsubtract函数,因为它们都实现了MathFunction接口。

总之,接口是 TypeScript 中用于定义对象或类的形状、函数的形状以及其他类型的一种契约。通过使用接口,您可以确保代码中的对象、类或函数具有正确的形状,从而提高代码的可读性、可维护性和可扩展性。

7. 什么是类?如何创建一个类?

在 TypeScript 中,类是一种用于创建对象的模板或蓝图。类定义了对象的属性和方法,以及对象的行为和功能。

要创建一个类,您可以使用class关键字,并在花括号中定义类的成员。类的成员可以包括属性、方法和构造函数。

下面是一个创建类的示例:

class Person {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}sayHello() {console.log(`Hello, my name is ${this.name}`);}
}

在上述示例中,我们创建了一个名为Person的类。该类具有两个属性nameage,一个构造函数constructor,以及一个名为sayHello的方法。

构造函数constructor用于初始化类的实例。在构造函数中,我们接受两个参数nameage,并将它们分别赋给类的属性。

sayHello方法用于输出一条问候语,其中包含类的实例的名称。

您可以通过创建类的实例来使用类。例如:

const person = new Person("Alice", 25);
person.sayHello();  // 输出: Hello, my name is Alice

在上述示例中,我们创建了一个名为personPerson类的实例,并将其名称设置为"Alice",年龄设置为 25。然后,我们调用了person实例的sayHello方法,输出了一条问候语,其中包含实例的名称。

8. 如何使用类的继承和多态?

在 TypeScript 中,类的继承是通过扩展现有类来创建新类的一种方式。通过继承,您可以在新类中重用现有类的属性和方法,并添加新的属性和方法。

下面是一个使用类的继承的示例:

class Person {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}sayHello() {console.log(`Hello, my name is ${this.name}`);}
}class Employee extends Person {department: string;constructor(name: string, age: number, department: string) {super(name, age);this.department = department;}sayGoodbye() {console.log(`Goodbye, my name is ${this.name} and I work in ${this.department}`);}
}

在上述示例中,我们创建了一个名为Person的类和一个名为Employee的类。Employee类扩展了Person类,并添加了一个名为department的新属性和一个名为sayGoodbye的新方法。

Employee类的构造函数中,我们调用了Person类的构造函数,并传递了实例的名称和年龄作为参数。这确保了Employee类的实例具有与Person类的实例相同的属性和方法。

多态是指在不同的上下文中使用相同的方法名,但根据对象的实际类型来执行不同的操作。在 TypeScript 中,您可以通过使用函数的类型注解和接口来实现多态。

下面是一个使用多态的示例:

interface Shape {area: number;
}class Rectangle implements Shape {width: number;height: number;constructor(width: number, height: number) {this.width = width;this.height = height;}get area() {return this.width * this.height;}
}class Circle implements Shape {radius: number;constructor(radius: number) {this.radius = radius;}get area() {return Math.PI * this.radius * this.radius;}
}function calculateArea(shape: Shape) {return shape.area;
}const rectangle = new Rectangle(5, 10);
const circle = new Circle(5);console.log(calculateArea(rectangle));  // 输出: 50
console.log(calculateArea(circle));  // 输出: 78.53981633974483

在上述示例中,我们创建了两个类RectangleCircle,它们都实现了Shape接口。Shape接口定义了一个名为area的属性,用于计算形状的面积。

calculateArea函数接受一个Shape类型的参数,并返回该形状的面积。由于RectangleCircle类都实现了Shape接口,因此我们可以将它们作为参数传递给calculateArea函数,并获得正确的结果。

这就是多态的体现,因为calculateArea函数可以根据传递给它的实际类型来执行不同的操作,而不需要关心对象的具体实现细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/171346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法应用:基于海鸥算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于海鸥算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于海鸥算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.海鸥算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

痤疮分级实验笔记-ResNet

组织数据集 方式1:根据txt文件分类的数据集组织形式(放弃) 你可以使用Python来读取txt文件中的训练集图片信息,并将这些图片从原始文件夹复制到目标文件夹中。 当程序无法找到标签对应的图片或者目标文件夹中已经存在同名图片时…

C语言编译过程再解析

多年以前,分析过编译过程,并写了一篇博客,现在对编译过程有了更广阔的认识,记录在此 编译过程 中的 链接与 编译 编译过程分为1. 预处理2. 编译3. 汇编4. 链接其中有 2个过程比较特殊,1. 编译2. 链接对于C程序来说,链接分为提前链接(静态链接)对应下图第1行运行时链接(动态链…

QGIS安装及简单使用

QGIS(Quantum GIS)是一个自由、开源的跨平台桌面地理信息系统(GIS)应用程序,它允许用户创建、编辑、查看、分析和发布地理空间数据和地图。 操作系统:Windows 10 QGIS版本:QGIS Desktop 3.28.…

【二叉树】oj题

在处理oj题之前我们需要先处理一下之前遗留的问题 在二叉树中寻找为x的节点 BTNode* BinaryTreeFind(BTNode* root, int x) {if (root NULL)return NULL;if (root->data x)return root;BTNode* ret1 BinaryTreeFind(root->left, x);BTNode* ret2 BinaryTreeFind(ro…

【华为OD】B\C卷真题:100%通过:找城市 C/C++实现

【华为OD】B\C卷真题:100%通过:找城市 C/C实现 题目描述: 一张地图上有n个城市,城市和城市之间有且只有一条道路相连:要么直接相连,要么通过其它城市中转相连(可中转一次或多次)。…

【计算机网络学习之路】日志和守护进程

文章目录 前言一. 日志介绍二. 简单日志1. 左字符串2. 右字符串 三. 守护进程1. ps -axj命令2. 会话扩展命令 3. 创建守护进程 结束语 前言 本系列文章是计算机网络学习的笔记,欢迎大佬们阅读,纠错,分享相关知识。希望可以与你共同进步。 本…

canvas扩展001:利用fabric绘制图形,可以平移,旋转,放缩

canvas实例应用100 专栏提供canvas的基础知识,高级动画,相关应用扩展等信息。 canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重要的帮助。 文章目录 示例…

串口通信基础知识介绍

一、串行通讯与并行通讯 在通信和计算机科学中,串行通信(Serial Communication)是一个通用概念,泛指所有的串行的通信协议,如RS232、RS422、RS485、USB、I2C、SPI等。 串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种…

JAVA时间常用操作工具类

小刘整理了JAVA中对时间的常用操作,封装了几种方法,简单方便,开箱即用。时间转字符串格式,字符串转时间,以及过去和未来的日期。除此之外,还新增了时间戳之差计算时分秒天的具体方案。 public static void …

如何使用nginx部署静态资源

Nginx可以作为静态web服务器来部署静态资源,这个静态资源是指在服务端真实存在,并且能够直接展示的一些文件数据,比如常见的静态资源有html页面、css文件、js文件、图片、视频、音频等资源相对于Tomcat服务器来说,Nginx处理静态资…

DGL在异构图上的GraphConv模块

回顾同构图GraphConv模块 首先回顾一下同构图中实现GraphConv的主要思路(以GraphSAGE为例): 在初始化模块首先是获取源节点和目标节点的输入维度,同时获取输出的特征维度。根据SAGE论文提出的三种聚合操作,需要获取所…

蓝桥杯第四场双周赛(1~6)

1、水题 2、模拟题,写个函数即可 #define pb push_back #define x first #define y second #define int long long #define endl \n const LL maxn 4e057; const LL N 5e0510; const LL mod 1e097; const int inf 0x3f3f; const LL llinf 5e18;typedef pair…

vue3+ts 兄弟组件之间传值

父级&#xff1a; <template><div><!-- <A on-click"getFlag"></A><B :flag"Flag"></B> --><A></A><B></B></div> </template><script setup lang"ts"> i…

01、copilot+pycharm

之——free for student 目录 之——free for student 杂谈 正文 1.for student 2.pycharm 3.使用 杂谈 copilot是github推出的AI程序员&#xff0c;将chatgpt搬到了私人终端且无token限制&#xff0c;下面是使用方法。 GitHub Copilot 是由 GitHub 与 OpenAI 合作开发的…

2023年3月电子学会青少年软件编程 Python编程等级考试一级真题解析(判断题)

2023年3月Python编程等级考试一级真题解析 判断题(共10题,每题2分,共20分) 26、在Python编程中,print的功能是将print()小括号的内容输出到控制台,比如:在Python Shell中输入print(北京,你好)指令,小括号内容可以输出到控制台 答案:错 考点分析:考查python中print…

【【Linux编程介绍之关键配置和常用用法】】

Linux编程介绍之关键配置和常用用法 Hello World ! 我们所说的编写代码包括两部分&#xff1a;代码编写和编译&#xff0c;在Windows下可以使用Visual Studio来完成这两部&#xff0c;可以在 Visual Studio 下编写代码然后直接点击编译就可以了。但是在 Linux 下这两部分是分开…

2024年第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛正式卷任务书

2024年第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛正式卷任务书 2024年第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛正式卷A模块基础设施设置/安全加固&#xff08;200分&#xff09;A-1&#xff1a;登录安全加固&#xff08;Windows, Linux&am…

【Mybatis】预编译/即时sql 数据库连接池

回顾 Mybatis是一个持久层框架.有两种方式(这两种方式可以共存) 1.注解 2.xml 一.传递参数 以使用#{} 来接受参数为例 (以上两种方式一样适用的) 1)传递单个参数 #{} 可以为任意名称 2)多个参数 默认的参数名称就是接口方法声明的形参 3)参数为对象 默认给每个对象的每个属性都…

Linux内核中的overlay文件系统

一、简介 Docker 内核实现容器的功能用了linux 内核中的三个特性 Namespace、Cgroup、UnionFs&#xff0c;今天我们来说一下UnionFs。 linux UnionFs 实现的是overlay 文件系统 OverlayFs 文件系统分为三层&#xff0c; lower 是只读层 Upper 是可读写 Merged 是 lower 和U…