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

news2025/4/7 19:34:08

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过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.coloradmin.cn/o/1254514.html

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

相关文章

串口通信基础知识介绍

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

2023年网络安全比赛--综合渗透测试②(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.通过 PC 中的渗透测试平台 Kali 对服务器场景进行渗透测试,将扫描开放的所有端口当作flag提交(例:21,22,23); 2.通过 PC 中的渗透测试平台 Kali 对服务器场景进行渗透测试,将初…

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

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

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

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

2018年4月26日 Go生态洞察:Go新品牌形象及标识发布

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

电子画册制作,谁能拒绝有这么好用的模板平台!

电子画册是我们生活中经常见到的,但很多人不知道电子画册是如何制作的,总觉得只有专业人士才能创作出来。其实不然,电子画册制作也可以很简单,就算是零基础小白也可以轻松上手,关键是找到一款可靠的制作工具。 在这方…

我的创作纪念日-----MySql服务

MySql服务 1.什么是数据库 1.1.数据 描述事物的符号记录,可以是数字文字、图形、图像、声音、语言等,数据有多种形式,它们都可以经过数字化后存入计算机。 1.2.数据库 存储数据的仓库,是长期存放在计算机内、有组织、可共享的大…

<JavaEE> Java中线程有多少种状态(State)?状态之间的关系有什么关系?

目录 一、系统内核中的线程状态 二、Java中的线程状态 一、系统内核中的线程状态 状态说明就绪状态线程已经准备就绪,随时可以接受CPU的调度。阻塞状态线程处于阻塞等待,暂时无法在CPU中执行。 二、Java中的线程状态 相比于系统内核,Java…

C++局域网从服务器获取已连接用户的列表(linux to linux)

目录 服务器端 代码 客户端 代码解析 服务器端 原理 遇到的阻碍以及解决办法 客户端 原理 遇到的阻碍以及解决办法 运行结果截图 总结 服务器端 代码 #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet…

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

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

4D Gaussian Splatting:用于实时的动态场景渲染

Wu G, Yi T, Fang J, et al. 4d gaussian splatting for real-time dynamic scene rendering[J]. arXiv preprint arXiv:2310.08528, 2023. 更多参考资料如下&#xff1a; 文章总结&#xff1a;4D Gaussian Splatting for Real-Time Dynamic Scene Rendering&#xff1b;疑难问…

Java作业四

要求&#xff1a;编写带图形界面的聊天程序&#xff0c;实现让客户可以持续地发送消息给服务器&#xff0c;服务器也可以即时看到客户端发送的消息&#xff0c;并回消息给客户端。 程序运行界面如下&#xff1a; 老师写的&#xff1a; 1、客户端 package Demo02; import java.…

VM虚拟机中Ubuntu14.04安装VM tools后仍不能全屏显示

1、查看Ubuntu所支持的分辨率大小。 在终端处输入&#xff1a; xrandr&#xff0c;回车 2、输入你想设置的分辨率参数。 我设置的为1360x768&#xff0c;大家可以根据自己的具体设备设置。 在终端输入&#xff1a;xrandr -s 1360x768 注意&#xff1a;这里1360后边是字母 x 且…

C语言-内存函数详解

文章目录 1. memcpy使用和模拟实现2. memmove使用和模拟实现3. memset函数的使用4. memcmp函数的使用 1. memcpy使用和模拟实现 返回类型和参数&#xff1a; void * memcpy ( void * destination, const void * source, size_t num );1.函数memcpy从source的位置开始向后复制…

电子学会C/C++编程等级考试2023年03月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字字符求和 请编写一个程序实现以下功能:从一个字符串中,提取出所有的数字字符即0-9,并作为数求和。 时间限制:1000 内存限制:65536输入 一行字符串,长度不超过100,字符串中不含空格。输出 字符串中所有数字字符作为数…

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

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

探索 Linux vim/vi 编辑器:介绍、模式以及基本操作演示

&#x1f490;作者&#xff1a;insist-- &#x1f490;个人主页&#xff1a;insist-- 的个人主页 理想主义的花&#xff0c;最终会盛开在浪漫主义的土壤里&#xff0c;我们的热情永远不会熄灭&#xff0c;在现实平凡中&#xff0c;我们终将上岸&#xff0c;阳光万里 ❤️欢迎点…

笔记(三)maxflow push relabel与图像分割

笔记&#xff08;三&#xff09;maxflow push relabel与图像分割 1. Push-Relabel算法思想2.Push-Relabel算法原理示意图3.Push-Relabel算法具体实例4. push relabel与图割 1. Push-Relabel算法思想 对于一个网络流图: 该算法直观可以这样理解&#xff0c;先在源节点处加入充足…

2018年1月22日 Go生态洞察:Hello, 中国!

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Java毕业设计 SpringBoot 车辆充电桩系统

Java毕业设计 SpringBoot 车辆充电桩系统 SpringBoot 车辆充电桩系统 功能介绍 首页 图片轮播 登录注册 充电桩展示 搜索充电桩 充电桩报修 充电常识 个人中心 我的收藏 后台管理 登录 首页 个人中心 维修员管理 用户管理 电桩类别管理 充电桩管理 充电桩报修管理 维修回复管…