每天一个前端小知识 Day 4 - TypeScript 核心类型系统与实践

TypeScript 核心类型系统与实践


1. 为什么前端面试中越来越重视 TypeScript?

  • 复杂业务场景需要强类型保障稳定性;
  • 更好的 IDE 支持和智能提示;
  • 降低线上 bug 概率;
  • 成熟的工程团队都在使用;
  • 对于 React/Vue 项目维护可读性更强。

2. TypeScript 的核心类型

✅ 原始类型

let str: string = 'hello';
let num: number = 123;
let flag: boolean = true;
let u: undefined = undefined;
let n: null = null;

✅ 数组与元组

let arr: number[] = [1, 2, 3];
let tuple: [string, number] = ['Tom', 25];

✅ 枚举(enum)

enum Direction {Up,Down,Left,Right,
}

✅ any 与 unknown

let a: any = 123; // 可绕过检查(不推荐)
let b: unknown = 'xxx'; // 必须类型断言后使用(推荐)

✅ void 与 never

function log(): void {console.log('ok');
}function error(): never {throw new Error('err');
}

3. 接口(interface)和类型别名(type)

✅ interface

interface Person {name: string;age?: number; // 可选属性
}

✅ type

type Point = {x: number;y: number;
};

面试常考区别:

  • interface 可被扩展(继承、合并),type 更灵活(联合、交叉)
  • 推荐优先使用 interface 定义对象结构

4. 类型推断与类型保护

✅ 类型推断

let name = 'Tom'; // 推断为 string

✅ 类型保护(Type Guards)

function isString(val: unknown): val is string {return typeof val === 'string';
}

5. 联合类型与交叉类型

✅ 联合类型

let value: string | number;

✅ 交叉类型

type Admin = { role: string };
type User = { name: string };
type AdminUser = Admin & User;

6. 泛型(Generics)🌟 面试高频考点

✅ 定义泛型函数

function identity<T>(arg: T): T {return arg;
}

✅ 泛型接口/类型

interface Box<T> {value: T;
}

✅ 约束泛型

function getLength<T extends { length: number }>(val: T) {return val.length;
}

7. 条件类型(高级类型技巧)

type IsString<T> = T extends string ? true : false;

常见内置工具类型:

工具类型作用
Partial<T>将 T 的所有属性变为可选
Readonly<T>所有属性只读
Pick<T, K>选择部分属性
Omit<T, K>排除部分属性
Record<K, T>构造键值对类型
ReturnType<T>提取函数返回类型

8. 实战面试题精讲

📌 Q1:type 和 interface 有什么区别?你如何选择?

答:

  • type 更灵活,可表达联合类型、元组、映射类型;
  • interface 更适合对象类型定义,支持声明合并;
  • 实际项目推荐对象结构用 interface,其他用 type

📌 Q2:如何定义一个支持任意键值的接口?

interface AnyObject {[key: string]: any;
}

📌 Q3:你是否用过泛型?举个例子?

function map<T, U>(arr: T[], fn: (item: T) => U): U[] {return arr.map(fn);
}

📌 Q4:如何约束泛型必须是数组?

function firstElement<T extends any[]>(arr: T): T[0] {return arr[0];
}

9. 常见误区 ⚠️

误区正确做法
认为 any 就是万能解决方案尽量避免 any,推荐使用 unknown 或具体类型
type 重复定义对象类型使用 interface 更适合扩展性和结构清晰
忽略了默认 strict 模式的重要性开启 strict 模式保障类型安全
不理解 never 类型的实际意义never 表示永远不会有返回(抛错/死循环)

✅ 总结

TypeScript 类型系统是前端工程化的根基,尤其在大型项目中提供了强大的类型约束和智能提示。掌握类型定义、泛型、工具类型等核心概念,不仅能写出更稳定的代码,也是中高级前端面试的必答项。

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

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

相关文章

uni-app插件,高德地图、地图区域绘制、定位打卡

介绍 高德地图、地图区域绘制、定位打卡 示例 默认 &#xff08;展示地图&#xff0c;是否可以打卡&#xff09; <template><view class"container"><map-positioning-punch:clock-in-area"clockInArea":refresh-timeout"refreshT…

_mm_aeskeygenassist_si128 硬件指令执行的操作

根据Intel的文档&#xff0c;_mm_aeskeygenassist_si128 指令执行以下操作&#xff1a; result[31:0] SubWord(RotWord(temp)) xor Rcon; result[63:32] SubWord(RotWord(temp)); result[95:64] SubWord(RotWord(temp)) xor Rcon; result[127:96] SubWord(RotWord(temp…

爬虫技术:数据获取的利器与伦理边界

一、爬虫技术的原理与架构 爬虫技术的核心是模拟人类浏览网页的行为&#xff0c;通过程序自动访问网站&#xff0c;获取网页内容。其基本原理可以分为以下几个步骤&#xff1a;首先&#xff0c;爬虫程序会发送一个 HTTP 请求到目标网站的服务器&#xff0c;请求获取网页数据。…

TortoiseSVN 下载指定版本客户端及对应翻译(汉化)包

访问官方网站 打开浏览器,进入 TortoiseSVN 官方网站:https://tortoisesvn.net/ ,这是获取官方版本最权威的渠道。 进入下载页面 在官网首页,找到并点击 Downloads(下载)选项,进入下载页面。 选择版本 在下载页面中,会展示最新版本的下载链接。如果需要指定版本,向下…

MacOS15.5 MySQL8 开启 mysql_native_password

MySQL 8 默认关闭了 mysql_native_password&#xff0c; 需要手动开启。但是MacOS各种坑&#xff0c;气死个人。 mysql8 内置了 mysql_native_password &#xff0c;只是没有开启。 验证方式是执行 show plugins; &#xff0c;返回的结果中应该有 mysql_native_password &…

Git分页器和Node.js常见问题解决方式

Git分页器(pager)常见问题解决方式&#xff0c;在Windows PowerShell中经常出现。以下是几种解决方法&#xff1a; 临时解决方法 按回车键继续 - 按照提示按RETURN&#xff08;回车键&#xff09;即可继续显示分支列表按 q 键退出 - 如果卡在分页器界面&#xff0c;按 q 键退…

module type中获取__dirname和__filename

module type中获取__dirname和__filename import { fileURLToPath } from url// 获取当前文件的目录路径&#xff08;ES模块中的__dirname替代方案&#xff09; const __filename fileURLToPath(import.meta.url) const __dirname path.dirname(__filename)

多维度剖析Kafka的高性能与高吞吐奥秘

在当今大数据与实时处理盛行的时代&#xff0c;Kafka作为一款卓越的分布式消息系统&#xff0c;凭借其令人惊叹的高性能与高吞吐能力&#xff0c;成为众多企业构建实时数据处理架构的首选。接下来&#xff0c;我们将从多个关键维度深入探究Kafka实现高性能与高吞吐的核心要素&a…

2025虚幻游戏系统积累

2025虚幻游戏系统积累 前言 积累一下虚幻的游戏系统。 之前写了2025虚幻人物模型积累-CSDN博客&#xff0c;算是解决了人物模型的问题。现在增加游戏玩法。毕竟无中生有难度有点大&#xff0c;照葫芦画瓢难度可以降低一点点。 内容 首先第一个就是 这个游戏demo很值得参考…

HTTPS握手过程中的随机数机制详解

在HTTPS/TLS握手过程中&#xff0c;随机数扮演着至关重要的安全角色。这些随机数不仅参与密钥生成&#xff0c;还提供了防止重放攻击等安全特性。下面我将全面解析握手流程中的随机数机制。 HTTPS 握手流程中的随机数机制解析 1. 客户端发起连接&#xff1a;生成 Client Rand…

MIPI CSI协议中的‌像素数据到字节的映射

MIPI CSI协议中的‌像素数据到字节的映射‌&#xff08;Mapping of pixel values to bytes&#xff09;是指将图像传感器输出的像素值&#xff08;通常以非8比特整数形式表示&#xff09;转换成适合在8位宽的物理传输接口上传输的字节序列的过程15。 其核心含义和技术要点如下…

47 C 语言指针与数组核心详解:字符指针 VS 字符数组、数组操作、字符串处理、编程实战案例

1 字符指针 1.1 概述 字符指针变量&#xff08;简称字符指针&#xff09;是 C 语言中的一种指针类型&#xff0c;用于指向字符或字符串&#xff08;字符数组、字符串字面量&#xff09;。字符指针通常用于处理字符串&#xff08;字符数组&#xff09;&#xff0c;可以方便地进…

gird 网格布局学习

属性 1、grid-template-columns 用来定义 网格容器的列轨道&#xff08;columns&#xff09; 的尺寸和数量。它允许你设定网格的列布局&#xff0c;控制列的宽度和排列方式。 // 使用示例 // 你可以使用固定的长度单位来定义每一列的宽度。例如 1、grid-template-columns: 100…

git最常用命令

本地身份 git config --global user.name "酒剑仙" git config --global user.email "xxxxqq.com"创建.gitignore文件 git init链接服务器 git remote add origin https://gitee.com/greentran/你的项目.git提交本地 git add .查看本地提交 git statu…

值类:Kotlin中的零成本抽象

Kotlin的值类&#xff08;Value Class&#xff09;是一种强大的类型安全工具&#xff0c;允许开发者创建语义明确的类型&#xff0c;并保持运行时零成本。 假设系统中存在用户的概念&#xff0c;用户拥有名字和电子邮箱地址。用户名和电子邮箱地址都是长度不超过120个字符的字…

arm64版BC-liunx-for-euler与X86_64版OpenEuler从源码安装git-lfs

1.arm64版BC-liunx-for-euler安装git-lfs 检查系统版本信息 uname -a Linux bms-42068966-004 5.10.0-136.49.0.127.10.oe2203.bclinux.aarch64 #1 SMP Tue Oct 10 14:09:09 CST 2023 aarch64 aarch64 aarch64 GNU/Linux 下载git-lfs构建脚本和源码 git clone https://gite…

2025国家卫健委减肥食谱PDF完整版(免费下载打印)

《成人肥胖食养指南&#xff08;2024年版&#xff09;》发布&#xff1a;科学减肥&#xff0c;从这里开始‌ 在这个追求健康与美的时代&#xff0c;减肥成为了许多人关注的热点话题。国家卫健委正式发布了《成人肥胖食养指南&#xff08;2024年版&#xff09;》&#xff0c;为我…

Android 手机如何实现本地视频音频提取?实战教程来了

我们经常会遇到这样的需求&#xff1a;比如看到一段喜欢的短视频&#xff0c;想把里面的背景音乐保存下来&#xff1b;或者需要从一段课程视频中提取语音内容用于学习。这时候&#xff0c;将手机视频转换成 MP3 音频就是一个非常实用的功能。 今天就来教大家如何使用一款简单好…

STM32项目---汽车氛围灯

一、蓝牙模块驱动 1、怎么使用蓝牙模块呢&#xff1f; 1&#xff1a;首先&#xff0c;先通过串口调试助手验证蓝牙模块是否正常使用。先连接好 2&#xff1a;打开串口调试软件配置好 3&#xff1a;发送测试指令&#xff1a;AT\r\n,返回OK&#xff0c;则说明连接正确&#xff…

python+uniapp微信小程序的共享雨伞租赁系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…