TS面试题

1.TS有哪些类型(对比与js)?

关键字/语法

用途

示例

any

关闭类型检查

let a: any = 4

unknown

类型安全的 any

let u: unknown = 4; if (typeof u === 'number') …

never

永不存在的值

function err(): never { throw 0; }

void

无返回值

function f(): void {}

enum / const enum

枚举

enum Color { Red = 1 }

union(联合)

“或”关系

string | number

intersection(交叉)

“且”关系

A & B

literal(字面量)

精确值

'GET' / 404 / true

readonly

只读属性

readonly x: number

? 可选属性

interface P { name?: string }

keyof

取键联合

keyof {a:1,b:2} → `'a'

typeof

取变量类型

let p = {x:1}; type T = typeof p

as 类型断言

(<HTMLElement>el).style

satisfies (4.9+)

保证表达式符合某类型并推断更精确类型

条件类型

T extends U ? X : Y

infer

在条件类型里提取子类型

映射类型

{ [K in keyof T]: T[K] }

模板字符串类型

` `user-${number}` `

2.type和interface的区别?何时用哪个?

在 90 % 的日常代码里两者可以互换;但 interface 可以同名自动合并被类实现/继承,而 type 可以做联合、交叉、元组等更复杂的复合类型。官方推荐:描述对象形状优先用 interface,需要组合、映射、条件类型时用 type

维度

interface

type

官方定位

描述“对象形状”(shape / contract)

描述任意“类型表达式”

能否同名合并(Declaration Merging)

✅ 自动合并
interface A {x:1}
interface A {y:2}{x:1,y:2}

❌ 重复定义即报错

继承 / 实现

extends 另一 interface
implements by class

❌ 不能被类实现

联合类型(|)

❌ 不支持

type T = A|B

交叉类型(&)

❌ 不支持

type T = A & B

元组 / 映射 / 条件 / infer

❌ 不支持

✅ 支持全部高级类型体操

基本对象描述

interface P {name:string}

type P = {name:string}

递归类型

✅ 支持

✅ 支持

运行时表现

完全擦除,无差异

完全擦除,无差异

对象、继承、合并用 interface;其余复杂场景用 type

3.什么是类型断言?如何使用?

类型断言(Type Assertion) 就是「开发者比编译器更懂类型,手动告诉它」的语法糖;它只在 编译阶段 起作用,运行时无任何效果

语法

示例

备注

尖括号(不推荐 JSX 环境)

<HTMLElement>document.querySelector('#app')

易与 JSX 混淆

as 写法(推荐)

document.querySelector('#app') as HTMLElement

通用、可读性高

4.什么是泛型

泛型是一种在定义函数、接口或类时不预先指定具体类型,而在使用时再指定类型的特性

T(或其他大写字母)作为“泛型”占位符,让同一段代码能够复用于不特定的数据类型

// 一颗星 T:传入什么类型,就返回什么类型
function echo<T>(value: T): T {return value;
}echo<string>('hello'); // T 点亮成 string
echo<number>(42);      // T 点亮成 number

5.装饰器是什么,如何使用?

装饰器是一种特殊类型的声明,可以附加到类、方法、访问符、属性或参数上。本质是函数

// 类装饰器
function sealed(constructor: Function) {Object.seal(constructor);Object.seal(constructor.prototype);
}@sealed
class Greeter {greeting: string;constructor(message: string) {this.greeting = message;}greet() {return "Hello, " + this.greeting;}
}// 方法装饰器
function log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {let originalMethod = descriptor.value;descriptor.value = function(...args: any[]) {console.log(`Calling ${propertyKey} with`, args);return originalMethod.apply(this, args);};return descriptor;
}class Calculator {@logadd(x: number, y: number) {return x + y;}
}

6.讲解一下ts的枚举?

TypeScript 枚举在编译期生成一个键值双向映射对象(数字 enum)或单向对象(字符串 enum),既能当类型又能当;使用 const enum 可彻底消除运行时开销

TypeScript 中的枚举(Enums)是一种特殊的对象类型,它允许我们定义一组命名常量。这使得代码更具可读性和可维护性,尤其是在处理一组固定的值时非常有用。

enum Direction {Up,Down,Left,Right,
}
console.log(Direction.Up); // 输出 0

enum Direction {Up = "UP",Down = "DOWN",Left = "LEFT",Right = "RIGHT",
}
console.log(Direction.Up); // 输出 "UP"

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

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

相关文章

借助Early Hints和HarperDB改善网页性能

对电商网站来说&#xff0c;糟糕的页面性能可能会增加交易放弃率。一直以来&#xff0c;人们会使用CDN进行缓存从而缩短页面加载时间&#xff0c;但即便实施了强大的缓存&#xff0c;消费者在通过移动网络访问这些网站时可能仍然会需要频繁等待。最近诞生了一种名为“早期提示”…

MEMS陀螺如何成为无人机稳定飞行的核心?

在无人机自主翱翔、灵活机动并适应多变环境的背后&#xff0c;对其运动状态——尤其是姿态——的精确感知是基石。作为飞行控制系统&#xff08;飞控&#xff09;的“内耳”&#xff0c;陀螺仪实时捕捉机体绕X、Y、Z三轴的旋转角速度。这一核心数据是飞控进行姿态解算和维持飞行…

腾讯云拉取docker镜像失败怎么办

ps:我直接按照步骤1和2就解决了 以下内容来自豆包 在腾讯云服务器上拉取 Docker 镜像失败&#xff0c;可以按照以下步骤排查和解决&#xff1a; 一、检查网络连接 确认服务器网络正常 bash ping www.baidu.com # 测试公网连通性如果无法 ping 通&#xff0c;检查服务器防火墙…

Apache FOP实践——pdf模板引擎

文章目录 基本概念设计思想具体实践完整应用 基本概念 Apache FOP&#xff08;Formatting Objects Processor&#xff09;是一个基于Java的开源工具&#xff0c;用于将 XSL-FO&#xff08;XSL Formatting Objects&#xff09; 文档转换为PDF、图像等格式。 设计思想 将内容&…

WebRTC核心组件技术解析:架构、作用与协同机制

引言&#xff1a;WebRTC的技术定位与价值 WebRTC&#xff08;Web Real-Time Communication&#xff09;作为一项开源实时通信标准&#xff0c;已成为浏览器原生音视频交互、P2P数据传输的技术基石。自2011年开源以来&#xff0c;其标准化进程由W3C&#xff08;API层&#xff0…

OmniParser:提升工作效率的视觉界面解析工具

OmniParser&#xff1a;基于视觉的用户界面解析工具在现代软件开发中&#xff0c;用户界面的自动化处理变得愈发重要。OmniParser 是一个强大的工具&#xff0c;旨在将用户界面的截图解析为结构化的、易于理解的元素&#xff0c;从而显著提升了大型语言模型&#xff08;如GPT-4…

C#程序员计算器

使用C#语言编写程序员计算器&#xff0c;使其能够进行加减乘除和与或非等逻辑运算。 calculator.cs 代码如下 using System; using System.Numerics; using System.Globalization;namespace Calculator1 {public enum CalcBase { Bin 2, Oct 8, Dec 10, Hex 16 }public en…

国产音频DA转换芯片DP7361支持192K六通道24位DA转换器

产品概述 DP7361 是一款立体声六通道线性输出的数模转换器&#xff0c;内含插值滤波器、Multi-Bit 数模转换 器、模拟输出滤波器&#xff0c;支持主流的音频数据格式。 DP7361 片上集成线性低通模拟滤波器和四阶 Multi-Bit Δ-∑调制器&#xff0c;能自动检测信号频率和主时钟频…

【C51单片机四个按键控制流水灯】2022-9-30

缘由C51&#xff0c;四个按键控制流水灯-嵌入式-CSDN问答 #include "REG52.h" sbit k1P3^0; sbit k2P3^1; sbit k3P3^2; sbit k4P3^3; unsigned char code lsd[]{127,191,223,239,247,251,253,254};//跑马灯 void jsys(unsigned char y,unsigned char s){unsigned c…

Python 脚本:获取公网 IPv4 和 IPv6 地址

本方案适合拨号宽带网络环境&#xff0c;当检测到公网IP地址变更时&#xff0c;可联动自动触发MQTT消息推送或邮件通知&#xff0c;实现动态IP的实时监控与告警。 0x01 代码import re import time import requestsdef extract_ip(html):"""用正则提取 IP&…

数字化转型-制造业未来蓝图:“超自动化”工厂

超自动化&#xff1a;2040年未来工厂的颠覆性蓝图工业革命250年后的新一轮范式革命 &#xff08;埃森哲&#xff1a;未来的制造&#xff1a;超自动化工厂蓝图有感&#xff09;&#x1f504; 从机械化到超自动化&#xff1a;制造业的第五次进化 自18世纪工业革命始&#xff0c;…

Java 15 新特性解析与代码示例

Java 15 新特性解析与代码示例 文章目录Java 15 新特性解析与代码示例引言1. 密封类&#xff08;Sealed Classes&#xff09;1.1. 什么是密封类&#xff1f;1.2. 为什么使用密封类&#xff1f;1.3. 语法1.4. 与传统方法的对比1.5. 使用场景1.6. 示例&#xff1a;结合模式匹配2.…

Vue 3 入门教程 - 1、基础概念与环境搭建

一、Vue 3 简介 Vue.js 是一款流行的 JavaScript 前端框架&#xff0c;用于构建用户界面。Vue 3 作为其最新版本&#xff0c;带来了诸多令人瞩目的新特性与性能优化&#xff0c;为开发者打造了更为高效、灵活的开发体验。 1.1 Vue 3 的优势 性能提升&#xff1a;对虚拟 DOM …

SpringBoot之多环境配置全解析

SpringBoot之多环境配置全解析一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式&#xff08;传统格式&#xff09;1. 基础配置文件&#xff08;application.properties&#xff09;2. 环境专属配置文件2.2 yaml/yml格式&#xff08;推荐&#xff09;1. 单文…

uvm-tlm-nonblocking-get-port

前文展示了使用本质为阻塞性质的uvm_blocking_get_port TLM端口的示例&#xff0c;其中接收方会停滞等待发送方完成get任务。类似地&#xff0c;UVM TLM还提供非阻塞类型的uvm_nonblocking_get_port&#xff0c;发送方需通过try_get来检测get是否成功&#xff0c;或通过can_get…

【NCS随笔】如何在hello_world添加蓝牙功能(一)

如何在hello_world添加蓝牙功能&#xff08;一&#xff09;环境准备 硬件&#xff1a;nRF54L15DK 软件版本&#xff1a;NCS3.0.2 例程&#xff1a;hello_world 宏的配置 # Config loggerCONFIG_LOGyCONFIG_USE_SEGGER_RTTyCONFIG_LOG_BACKEND_RTTyCONFIG_LOG_BACKEND_UARTnONFI…

机器学习——KNN实现手写数字识别:基于 OpenCV 和 scikit-learn 的实战教学 (超级超级超级简单)

用KNN实现手写数字识别&#xff1a;基于 OpenCV 和 scikit-learn 的实战教学在这篇文章中&#xff0c;我们将使用 KNN&#xff08;K-Nearest Neighbors&#xff09;算法对手写数字进行分类识别。我们会用 OpenCV 读取图像并预处理数据&#xff0c;用 scikit-learn 构建并训练模…

【Git】分支

文章目录理解分支创建分支切换分支合并分支删除分支合并冲突分支管理策略分支策略bug 分支删除临时分支小结理解分支 本章开始介绍 Git 的杀手级功能之一&#xff08;注意是之一&#xff0c;也就是后面还有之二&#xff0c;之三……&#xff09;&#xff1a;分支。分支就是科幻…

【32】C# WinForm入门到精通 ——打开文件OpenFileDialog 【属性、方法、事件、实例、源码】

WinForm 是 Windows Form 的简称&#xff0c;是基于 .NET Framework 平台的客户端&#xff08;PC软件&#xff09;开发技术&#xff0c;是 C# 语言中的一个重要应用。 .NET 提供了大量 Windows 风格的控件和事件&#xff0c;可以直接拿来使用。 本专栏内容是按照标题序号逐渐…

Wan2.2开源第1天:动态灯光功能开启创意氛围新境界

在开源软件蓬勃发展的今天&#xff0c;每一次新版本的发布都如同在创意的星空中点亮了一颗璀璨的新星。今天&#xff0c;&#xff08;通义万相国际版wan&#xff09;Wan2.2正式开源&#xff0c;它带着令人眼前一亮的动态灯光功能惊艳登场&#xff0c;为所有追求创意与氛围营造的…