当前位置: 首页 > news >正文

ts面试题: 面试题2

31. 计算字符串长度

// 计算字符串的长度,类似于 String#length 。

答案

type test = Str1<"abc123">;
type Str1<T extends string, L extends any[] = []> = T extends `${infer f}${infer b}` ? Str1<b, [...L, f]> : L['length'];

32. 接口添加字段

// 实现一个为接口添加一个新字段的类型。该类型接收三个参数,返回带有新字段的接口类型。例如:type Test = { id: '1' }
type Result = AppendToObject<Test, 'value', 4> // expected to be { id: '1', value: 4 }

答案

type AppendToObject<T, K extends string, N,> = {[P in (keyof T | K)]: P extends keyof T ? T[P] : N
}

33.返回一个正数字符串

Absolute 
实现一个接收string,number或bigInt类型参数的Absolute类型,返回一个正数字符串。例如
type Test = -100;
type Result = Absolute<'-12309'>; // expected to be "100"

答案

type Absolute<T> = T extends (string|number|bigint) ? `${T}` extends `${'-'}${infer F}` ? F: `${T}`  :''

34. 字符串转字母联合类型

String to Union
实现一个将接收到的String参数转换为一个字母Union的类型。例如
type Test = '123';
type Result = StringToUnion<Test>; // expected to be "1" | "2" | "3"

答案

type StringToUnion<T, F extends any[] = []> = 
T extends `${infer First}${infer O}` ? StringToUnion<O, [ ...F, First]> : F[number]

35. merge合并两个接口类型

// Merge
// 将两个类型合并成一个类型,第二个类型的键会覆盖第一个类型的键。// 例如
type foo = {name: string;age: string;}type coo = {age: number;sex: string}type Result = Merge<foo,coo>; // expected to be {name: string, age: number, sex: string}

答案

  type Merge<T, U> = {[P in keyof T | keyof U]: P extends keyof U ? U[P] :  P extends keyof T? T[P] : never}

36. 将大小写驼峰写法转换成短横线连接命名法

// KebabCase 
// 将camelCase小驼拼写法或pascalcase大驼峰写法(第一个字符是大写的驼峰写法)字符串替换为短横线连接命名法。
// FooBarBaz -> foo-bar-baz
// 例如type FooBarBaz = KebabCase<"FooBarBaz">
const foobarbaz: FooBarBaz = "foo-bar-baz"type DoNothing = KebabCase<"do-nothing">
const doNothing: DoNothing = "do-nothing"

答案

type KebabCase<T, S extends string = ''> =T extends `${infer first}${infer other}` ?KebabCase<other, `${S}${first extends Lowercase<first> ? '' : '-'}${Lowercase<first>}`>: S extends `${'-'}${infer O}` ? O : S

37. 获取接口差值属性

// 获取两个接口类型中的差值属性。
type Foo = {a: string;b: number;}type Bar = {a: string;c: boolean}type Result1 = Diff<Foo,Bar> // { b: number, c: boolean }type Result2 = Diff<Bar,Foo> // { b: number, c: boolean }

答案

type Diff<A, B,> = {[P in Exclude<keyof A | keyof B, keyof A & keyof B>]: P extends keyof A ? A[P] : P extends keyof B ? B[P] : never
}

相关文章:

ts面试题: 面试题2

31. 计算字符串长度 // 计算字符串的长度&#xff0c;类似于 String#length 。答案 type test Str1<"abc123">; type Str1<T extends string, L extends any[] []> T extends ${infer f}${infer b} ? Str1<b, [...L, f]> : L[length];32. 接…...

.NET 某和OA办公系统全局绕过漏洞分析

转自先知社区 作者&#xff1a;dot.Net安全矩阵 原文链接&#xff1a;.NET 某和OA办公系统全局绕过漏洞分析 - 先知社区 0x01 前言 某和OA协同办公管理系统C6软件共有20多个应用模块&#xff0c;160多个应用子模块&#xff0c;从功能型的协同办公平台上升到管理型协同管理平…...

Git-01

Git是一个免费且开源的分布式版本控制系统&#xff0c;它可以跟踪文件的修改、记录变更的历史&#xff0c;并且在多人协作开发中提供了强大的工具和功能。 Git最初是由Linus Torvalds开发的&#xff0c;用于Linux内核的开发&#xff0c;现在已经成为了广泛使用的版本控制系统&a…...

GitLab的原理及应用详解(七)

本系列文章简介: 随着软件开发的不断进步和发展,版本控制系统成为了现代软件开发过程中不可或缺的一部分。而GitLab作为其中一种流行的版本控制工具,在软件开发领域享有广泛的应用。GitLab不仅提供了强大的版本控制功能,还集成了项目管理、持续集成和部署、代码审查等多个功…...

Vue中使用Vue-scroll做表格使得在x轴滑动

页面效果 首先 npm i vuescroll 在main.js中挂载到全局 页面代码 <template><div class"app-container"><Header :titletitle gobackgoBack><template v-slot:icon><van-icon clickgoHome classicon namewap-home-o /></templat…...

【高频】从输入URL到页面展示到底发生了什么?

一、相关衍生面试问题&#xff1a; 浏览器输入美团网站&#xff0c;从回车到浏览器展示经历了哪些过程 &#xff1f; http输入网页之后的流程&#xff1f; 百度搜索页面&#xff0c;从点开搜索框&#xff0c;到显示搜索页面经历了什么&#xff1f; 二、探究各个过程&#x…...

【CSharp】ushort[]的IntPtr快速转换为ushort[]无符号短整型数组

【CSharp】ushort[]的IntPtr快速转换为ushort[]无符号短整型数组 1.背景2.代码1.背景 参考博客: 【CSharp】无符号短整型数组ushort[]转化为IntPtr https://blog.csdn.net/jn10010537/article/details/139278321?spm=1001.2014.3001.5501探测器/相机SDK获得是InPtr指针,它…...

释放 OSINT 的力量:在线调查综合指南

开源情报 (OSINT) 是从公开信息中提取有价值见解的艺术。无论您是网络安全专业人士、道德黑客还是情报分析师&#xff0c;OSINT 都能为您提供先进的技术&#xff0c;帮助您筛选海量的数字数据&#xff0c;发现隐藏的真相。 在本文中&#xff0c;我们将深入研究大量的OSINT 资源…...

22.Volatile原理

文章目录 Volatile原理1.Volatile语义中的内存屏障1.1.volatile写操作的内存屏障1.1.1.StoreStore 屏障1.1.2.StoreLoad 屏障 1.2.volatile读操作的内存屏障1.2.1.LoadStore屏障1.2.2.LoadLoad屏障 2.volatile不具备原子性2.1.原理 Volatile原理 1.Volatile语义中的内存屏障 在…...

Vue 3中的v-for指令使用详解

Vue 3中的v-for指令使用详解 一、前言1. 基本语法2. 循环渲染对象3. 在组件中使用v-for4.普通案例5. 其他用法 二、结语 一、前言 在Vue 3中&#xff0c;v-for指令是一个非常强大且常用的指令&#xff0c;它用于在模板中循环渲染数组或对象的内容。本文将为您详细介绍Vue 3中v…...

GB-T 43694-2024 网络安全技术 证书应用综合服务接口规范

编写背景 随着网络技术的发展和信息化进程的加速&#xff0c;网络安全问题日益凸显。为了加强网络安全管理&#xff0c;提升网络服务的安全性和可靠性&#xff0c;GB-T 43694-2024《网络安全技术 证书应用综合服务接口规范》应运而生。这份文件是 网络安全领域的标准之一&…...

AI大模型:掌握未知,开启未来

AI大模型的工作原理 AI大模型是指通过大量数据和复杂算法训练出的能够理解和生成自然语言文本的人工智能模型。它们背后的核心技术主要包括深度学习、神经网络和自然语言处理。以下是详细的工作原理以及通俗易懂的类比&#xff1a; 1. 数据收集和预处理 AI大模型的训练首先需…...

【C语言习题】26.字符逆序

文章目录 1.描述2.解题思路3.具体代码 1.描述 输入描述: 将一个字符串str的内容颠倒过来&#xff0c;并输出。可以有空格 数据范围&#xff1a;1≤&#x1d459;&#x1d452;&#x1d45b;(&#x1d460;&#x1d461;&#x1d45f;)≤10000 1≤len(str)≤10000 输出描述&…...

windows和linux下的库文件比较

在Windows和Linux操作系统中&#xff0c;库文件&#xff08;lib、dll、.a、.so&#xff09;都扮演着重要的角色&#xff0c;但它们之间存在一些关键的区别。以下是这些库文件之间的主要差异&#xff1a; Windows lib 静态链接库&#xff08;Static Link Library&#xff09;…...

第七十九节 Java面向对象设计 - Java访问级别

Java面向对象设计 - Java访问级别 类简单名称是 class 关键字和 {)之间的名称。 当我们通过简单的名称引用一个类时&#xff0c;编译器在引用类所在的同一个包中查找该类声明。 我们可以使用全名来引用一个类如下。 com.w3cschool.Dog aDog;指定类的访问级别的一般语法是 &…...

Vue进阶之Vue项目实战(四)

Vue项目实战 出码功能知识介绍渲染器性能调优使用 vue devtools 进行分析使用“渲染”进行分析判断打包构建的产物是否符合预期安装插件使用位置使用过程使用lighthouse分析页面加载情况使用performance分析页面加载情况应用自动化部署与发布CI/CD常见的CI/CD服务出码功能 出码…...

fix leakage脚本

芯片的PPA追求是无止境的&#xff0c;因而在修时序的过程中我们需要对设计修复leakage&#xff0c;降低芯片的静态功耗。 以下分享一个典型的leakage脚本 set design 1 set version "V1" set date [exec date %m%d%H%M] set working_directory ${design}_${version}…...

MySQL中视图是什么,有什么作用

目录 一、视图的简介 1.1 什么是视图&#xff1f; 1.2 为什么使用视图&#xff1f; 1.3 视图有哪些规则与限制&#xff1f; 1.4 视图能否更新&#xff1f; 二、视图的创建 三、视图的作用 3.1 用视图简化复杂的联结 3.2 用视图格式化检索出的数据 3.3 用视图过滤数据…...

【面试题】JavaScript基础高频面试(下)

10、Javascript 闭包是什么,闭包形成的原因和闭包的用途 &#xff1f; 闭包&#xff08;Closure&#xff09;是 JavaScript 中的一个非常重要的概念。简单地说&#xff0c;闭包就是一个函数能够访问另一个函数的作用域。这是因为在 JavaScript 中&#xff0c;函数是一等公民&a…...

对于个人而言,大数据时代如何更好地管理自己的信息?

在大数据时代&#xff0c;管理个人信息变得尤为重要。以下是几个建议来更好地管理个人信息&#xff1a; 认识和了解自己的数字足迹&#xff1a;了解自己在互联网上的活动&#xff0c;包括浏览历史、社交媒体和在线购物数据等。通过查阅自己的帐户设置和隐私选项&#xff0c;可以…...

麦当劳中国启动2026全国招聘周招募新生代人才

美通社消息&#xff1a;麦当劳中国正式启动2026年全国招聘周。今年&#xff0c;首批年满16周岁的10后将步入职场&#xff0c;与00后共同构成新生代主力军。在AI的变革时代&#xff0c;麦当劳以"有保障、有福利、有发展"的薪酬福利成长体系&#xff0c;以及长期、系统…...

VS Code 轻量自动化实战:Trae 集成 3 步配置与 5 个高频任务模板

1. 三步集成不是魔法,是可控的上下文锚点 大多数人第一次在 VS Code 里配 Trae,会直接打开官方文档翻到「安装」章节,复制粘贴几行命令,重启编辑器,然后对着空白的侧边栏发呆——它没反应。不是插件没装好,也不是网络问题。是我试过三次才意识到:Trae 的「激活」不靠重…...

GIS技巧100例23-ArcGIS像元统计实战:从月度栅格到年度气候指标

1. 像元统计基础与气候数据特点 刚接触GIS处理气候数据时&#xff0c;我经常被各种栅格格式和统计方法搞得晕头转向。直到有次用ArcGIS的像元统计工具批量处理了5年的月降水数据&#xff0c;才发现这个功能简直是隐藏的效率神器。像元统计&#xff08;Cell Statistics&#xff…...

非规则区域上空间分数阶偏微分方程的有限元方法【附仿真】

✨ 长期致力于空间分数阶导数、高维问题、有限元方法、非规则区域、非结构化网格、非光滑解研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;二维非规则…...

从NTC103到PT100:手把手教你为Arduino和STM32选型与编程(温度传感器实战)

从NTC103到PT100&#xff1a;手把手教你为Arduino和STM32选型与编程&#xff08;温度传感器实战&#xff09; 在物联网和智能硬件项目中&#xff0c;温度监测是最基础也最关键的环节之一。无论是恒温箱、环境监测站还是工业控制系统&#xff0c;选择一款合适的温度传感器往往决…...

明日方舟自动化助手MAA:3步解放双手,让游戏回归乐趣

明日方舟自动化助手MAA&#xff1a;3步解放双手&#xff0c;让游戏回归乐趣 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: ht…...

影刀RPA工程实战:多店铺环境隔离体系与自动化流程的事务性保障

一个店铺登录态串到另一个店铺&#xff0c;只在一瞬间。 但要真正杜绝它&#xff0c;需要的是一整套工程约束。 上一篇文章聊了浏览器实例池与并发调度&#xff0c;那套东西帮我们扛住了几十个店铺同时跑的稳定性。但很快我们又遇到了一个新问题&#xff1a;店铺之间的环境边界…...

CircuitJS1:浏览器中的电子电路仿真神器完全指南

CircuitJS1&#xff1a;浏览器中的电子电路仿真神器完全指南 【免费下载链接】circuitjs1 Electronic Circuit Simulator in the Browser 项目地址: https://gitcode.com/gh_mirrors/ci/circuitjs1 想要学习电子电路却苦于没有实验设备&#xff1f;需要验证电路设计却不…...

终极Windows更新修复指南:5分钟解决系统更新问题

终极Windows更新修复指南&#xff1a;5分钟解决系统更新问题 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool 你是否遇到过Wind…...

保姆级教程:用Docker一键部署RustDesk私有服务器(含Web客户端和API)

零基础构建企业级RustDesk私有化远程控制平台&#xff1a;Docker全栈部署指南 远程协作工具已成为现代工作流中不可或缺的一环&#xff0c;但商业解决方案往往面临价格高昂、数据隐私不可控等问题。RustDesk作为开源远程桌面工具&#xff0c;凭借其跨平台特性和自建服务器能力&…...