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

在这里插入图片描述

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

文章目录

    • 9. 什么是泛型?如何使用泛型?
    • 10. 什么是类型 inference?它在 TypeScript 中的作用是什么?
    • 11. 如何使用模块?为什么需要使用模块?
    • 12. 如何使用命名空间?

9. 什么是泛型?如何使用泛型?

在 TypeScript 中,泛型是一种允许您在不指定具体类型的情况下编写通用代码的机制。泛型允许您创建可以接受多种不同类型作为参数的函数、类和接口。

要使用泛型,您可以在函数、类或接口的声明中使用<T><typename>来指定一个占位符类型参数。然后,您可以在函数、类或接口的定义中使用该类型参数来表示任何类型。

下面是一个使用泛型的示例:

function createArray<T>(length: number): T[] {
    return new Array(length);
}

const numbers = createArray<Number>(5);
const strings = createArray<String>(5);

在上述示例中,我们定义了一个名为createArray的函数,它接受一个类型参数T和一个数字参数length。该函数返回一个包含指定长度的T类型元素的数组。

然后,我们创建了两个变量numbersstrings,分别使用createArray<Number>createArray<String>来创建包含 5 个数字和 5 个字符串的数组。

泛型的使用使得代码更加通用和灵活,因为它允许您编写可以处理多种不同类型的函数、类和接口,而无需为每种类型编写重复的代码。

10. 什么是类型 inference?它在 TypeScript 中的作用是什么?

在 TypeScript 中,类型 inference 是一种机制,用于根据变量的初始化值或函数的参数类型自动推断变量或函数的类型

类型 inference 使得您无需显式地指定变量或函数的类型,因为 TypeScript 可以根据上下文自动推断它们的类型。

下面是一个使用类型 inference 的示例:

let name = "Alice"; // 类型被推断为 string
let age = 25; // 类型被推断为 number
let isAdult = true; // 类型被推断为 boolean

function sayHello(person: { name: string, age: number }) {
    console.log(`Hello, my name is ${person.name} and I am ${person.age} years old.`);
}

sayHello({ name: "Bob", age: 30 });

在上述示例中,TypeScript 可以根据变量的初始化值自动推断它们的类型。例如,变量name被初始化为字符串"Alice",因此它的类型被推断为string。同样,变量age被初始化为数字 25,因此它的类型被推断为number

在函数sayHello中,我们没有显式地指定参数person的类型,但是 TypeScript 可以根据传入的实际参数自动推断它的类型。在上述示例中,函数sayHello被调用时传递了一个包含nameage属性的对象,因此person的类型被推断为{ name: string, age: number }

类型 inference 可以提高代码的可读性和可维护性,因为它减少了不必要的类型注解,并使代码更加简洁和直观。但是,在某些情况下,您可能需要显式地指定变量或函数的类型,以确保代码的正确性和可读性。

11. 如何使用模块?为什么需要使用模块?

在 TypeScript 中,模块是一种组织代码的方式,它允许您将代码划分为独立的单元,并在不同的文件中分别定义和使用它们。

要使用模块,您可以使用importexport关键字。import关键字用于从其他模块中导入代码,而export关键字用于将代码从当前模块中导出,以便其他模块可以使用它。

下面是一个使用模块的示例:

// 文件: module.ts
export function multiply(a: number, b: number): number {
    return a * b;
}

// 文件: app.ts
import { multiply } from "./module";

console.log(multiply(5, 10));  // 输出: 50

在上述示例中,我们在module.ts文件中定义了一个名为multiply的函数,并使用export关键字将其导出。

然后,在app.ts文件中,我们使用import { multiply } from "./module";语句从module.ts文件中导入multiply函数,并将其赋值给本地变量multiply

最后,我们调用multiply函数并传递参数 5 和 10,输出结果为 50。

使用模块的主要原因是提高代码的可读性、可维护性和可重用性。通过将代码划分为独立的模块,您可以更好地组织代码结构,减少命名冲突,并更方便地管理和维护代码。

此外,模块还可以提高代码的可测试性,因为您可以在不同的文件中分别测试每个模块,而无需在单个文件中包含所有的代码。

12. 如何使用命名空间?

在 TypeScript 中,命名空间是一种组织代码的方式,它允许您将相关的代码和类型分组到一个命名空间中,并在代码中通过命名空间来访问它们。

要使用命名空间,您可以使用namespace关键字来定义一个命名空间,并使用export关键字来将命名空间中的内容导出。

下面是一个使用命名空间的示例:

// 文件: namespace.ts
namespace MyNamespace {
    export function multiply(a: number, b: number): number {
        return a * b;
    }
}

// 文件: app.ts
import { multiply } from "./namespace";

console.log(multiply(5, 10));  // 输出: 50

在上述示例中,我们在namespace.ts文件中定义了一个名为MyNamespace的命名空间,并在该命名空间中定义了一个名为multiply的函数。

然后,在app.ts文件中,我们使用import { multiply } from "./namespace";语句从namespace.ts文件中导入multiply函数,并将其赋值给本地变量multiply

最后,我们调用multiply函数并传递参数 5 和 10,输出结果为 50。

使用命名空间的主要原因是提高代码的可读性和可维护性。通过将相关的代码和类型分组到一个命名空间中,您可以更好地组织代码结构,减少命名冲突,并更方便地管理和维护代码。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud微服务网关Gateway:gateway基本实现、断言工厂、过滤器工厂、浏览器同源策略、跨域问题解决方案

Gateway网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0和Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API路由管理方式 为什么…

虚拟人物视频

背景 大家好&#xff0c;我是小欣&#xff0c;是这个博客的虚拟助手。在这里&#xff0c;我将为大家提供各种有趣、实用、甚至是意想不到的信息。作为一个年轻的语言模型&#xff0c;我的目标是为你们呈现出最有趣和有深度的内容。 我喜欢与大家分享知识、解答问题&#xff0…

视频格式转换:将MP4轻松转MKV格式,高效便捷

随着科技的发展&#xff0c;数字媒体已经深入到生活中&#xff0c;视频格式的转换也成为了许多人的日常要求。MP4和MKV是两种常见的视频格式&#xff0c;它们各有优点。MP4以其高效的压缩比和广泛的兼容性被广泛使用&#xff0c;而MKV则因其强大的封装能力和无损压缩而受到喜爱…

提升逼格,自己搭建博客网站不求人

背景 对于一个热爱分享知识和经验的大佬来说&#xff0c;搭建一个自己的个人博客是十分必要的。因为各个免费写博客平台都会有每天写博客限制&#xff0c;比如我现在这篇文章的限制&#xff0c;就是每天最多发表3篇&#xff0c;同时还给我的博客添加一大波广告&#xff0c;真是…

网络编程基本概念

网络编程基本概念 为什么需要网络编程&#xff1f; 用户在浏览器中&#xff0c;打开在线视频网站&#xff0c;如优酷看视频&#xff0c;实质是通过网络&#xff0c;获取到网络上的一个视频资源。 与本地打开视频文件类似&#xff0c;只是视频文件这个资源的来源是网络。 相…

人工智能_机器学习051_支持向量机SVM概念介绍_理解support vector machine---人工智能工作笔记0091

在出现深度学习,神经网络算法之前,支持向量机已经可以解决很多问题了,我们自然界中的问题,无非就是可以转换为回归问题和分类问题. 然后从现在开始我们来看支持向量机,首先看一下这几个字 support 是支持 vector是向量的意思,然后 machine指的是机器 那么我们之前用到的模型…

【Java】实现一个自己的定时器

上文讲了怎样使用Java自带的定时器【Java】定时器的简单应用 这篇博客就来讲如何来编写一个自己实现的定时器 1、代码框架 由定时器的使用方法得知&#xff0c;我们在使用定时器的时候会添加一个任务timerTask类&#xff0c;而timer类则是我们行使任务的类&#xff0c;因此可…

深入解析:如何开发抖音票务小程序

当下&#xff0c;开发抖音票务小程序成为了吸引年轻用户群体的一种创新方式。本文将深入解析如何开发抖音票务小程序&#xff0c;探讨关键步骤和技术要点。 1.确定需求和功能 考虑到抖音的用户特点&#xff0c;可以加入与短视频相关的票务功能&#xff0c;如在线购票、观影记录…

vim+xxd编辑十六进制的一个大坑:自动添加0x0a

问题描述 今天在做一个ctf题&#xff0c;它给了一个elf文件&#xff0c;我要做的事情是修复这个elf文件&#xff0c;最后执行它&#xff0c;这个可执行文件会计算它自身的md5作为这道题的flag。我把所有需要修复的地方都修复了&#xff0c;程序也能成功运行&#xff0c;但是fl…

百度 Comate 终于支持 IntelliJ IDEA 了

大家好&#xff0c;我是伍六七。 对于一直关注 AI 编程的阿七来说&#xff0c;编程助手绝对是必不可少的&#xff0c;除了 GitHub Copilot 之外&#xff0c;国内百度的 Comate 一直是我关注的重点。 但是之前&#xff0c;Comate 还支持 VS code&#xff0c;并不支持 IntelliJ…

Android 相机库CameraView源码解析 (二) : 拍照

1. 前言 这段时间&#xff0c;在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位&#xff0c;在项目前期&#xff0c;的确为我们节省了不少时间。 但随着项目持续深入&#xff0c;对于CameraView的使用进入深水区&#xff0c;逐…

哈希思想的应用

目录 1.位图 位图的实现 题目变形一 题目变形二 题目变形三 总结&#xff1a; 2.布隆过滤器 概念 布隆过滤器的实现 3.哈希切割的思想 1.位图 哈希表和位图是数据结构中常用的两种技术。哈希表是一种数据结构&#xff0c;通过哈希函数把数据和位置进行映射&#xff0c…

公司人事管理系统

1.问题描述 一个小公司包含四类人员&#xff1a;经理&#xff0c;技术人员&#xff0c;销售人员和销售经理&#xff0c;各类人员的工资计算方法如下&#xff1a;经理&#xff1a;固定月薪&#xff08;8000&#xff09;&#xff1b;技术人员&#xff1a;月薪按技术等级&#xf…

【LeetCode】挑战100天 Day15(热题+面试经典150题)

【LeetCode】挑战100天 Day15&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-172.1 题目2.2 题解 三、面试经典 150 题-173.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&…

AI视频生成工具——Runway gen2 全功能超详细使用教程(2)

昨天给大家分享了Runway Gen1的使用教程&#xff0c;一篇文章就能让你轻松掌握使用文字和图像从现有视频生成新的视频技能&#xff0c;还没有看过的同学们可以回看过往文章。 Runway视频生成功能有3大核心成品 Gen1&#xff1a;视频转视频工具Gen2&#xff1a;视频生成编辑工…

阅读笔记——《Removing RLHF Protections in GPT-4 via Fine-Tuning》

【参考文献】Zhan Q, Fang R, Bindu R, et al. Removing RLHF Protections in GPT-4 via Fine-Tuning[J]. arXiv preprint arXiv:2311.05553, 2023.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&#xff0c;请联系作者删除。 目录 摘要 一、介绍 二、背景 三、方法…

集线器-交换机-路由器

1.集线器(Hub) 集线器就是将网线集中到一起的机器&#xff0c;也就是多台主机和设备的连接器。集线器的主要功能是对接收到的信号进行同步整形放大&#xff0c;以扩大网络的传输距离&#xff0c;是中继器的一种形式&#xff0c;区别在于集线器能够提供多端口服务&#xff0c;也…

Rust UI开发(三):iced如何打开图片(对话框)并在窗口显示图片?

注&#xff1a;此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库&#xff0c;用于为rust语言程序构建UI界面。 这是一个系列博文&#xff0c;本文是第三篇&#xff0c;前两篇的链接&#xff1a; 1、Rust UI开发&#xff08;一&#xff09;&#xff1a;使用iced构建…

2023年09月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 运行下面程序后,角色的x坐标值是?( ) A:100 B:90 C:110 D:120 答案:C 利用变量值作为条件,控制循环的次数。变量从0~10的过程中每次角色的x坐标都增加了10,当变量值为1…

人力资源管理后台 === 左树右表

1.角色管理-编辑角色-进入行内编辑 获取数据之后针对每个数据定义标识-使用$set-代码位置(src/views/role/index.vue) // 针对每一行数据添加一个编辑标记this.list.forEach(item > {// item.isEdit false // 添加一个属性 初始值为false// 数据响应式的问题 数据变化 视图…