前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TypeScript 体操,从进阶到放弃!

TypeScript 体操,从进阶到放弃!

作者头像
萌萌哒草头将军
发布于 2025-04-30 06:13:19
发布于 2025-04-30 06:13:19
17200
代码可运行
举报
文章被收录于专栏:前端框架前端框架
运行总次数:0
代码可运行

前言

最近有了面试的打算,所以抽空整理了一些高难度的内容,有兴趣的小伙伴可以跟我一起慢慢过一遍,一定要要自己手写一遍,不会了在来这里参考!

正文

1. If 工具类型
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type If<C extends boolean, T, F> = C extends true ? T : F;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type A = If<true, 'yes', 'no'>  // 'yes'
type B = If<false, 1, 2>        // 2
2. Concat:连接两个数组
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Concat<T extends any[], U extends any[]> = [...T, ...U];
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Concat<[1, 2], [3, 4]>  // [1, 2, 3, 4]
3. Includes:判断是否包含
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Equal<X, Y> =
  (<T>() => T extends X ? 1 : 2) extends
  (<T>() => T extends Y ? 1 : 2) ? true : false;

typeIncludes<Textendsreadonlyany[], U> = 
Textends [inferF, ...inferR]
    ? Equal<F, U> extendstrue ? true : Includes<R, U>
    : false;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Includes<['a', 'b', 'c'], 'a'>  // true
type R2 = Includes<[1, 2, 3], 4>         // false
4. Push
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Push<T extends any[], U> = [...T, U];
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Push<[1, 2], 3>  // [1, 2, 3]
5. Unshift
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Unshift<T extends any[], U> = [U, ...T];
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Unshift<[2, 3], 1>  // [1, 2, 3]
6. Length
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Length<T extends readonly any[]> = T['length'];
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Length<[1, 2, 3]>  // 3
7. Pop
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Pop<T extends any[]> = T extends [...infer R, any] ? R : never;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Pop<[1, 2, 3]>  // [1, 2]
8. Shift
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Shift<T extends any[]> = T extends [any, ...infer R] ? R : never;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Shift<[1, 2, 3]>  // [2, 3]
9. TupleToUnion
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type TupleToUnion<T extends any[]> = T[number];
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = TupleToUnion<['a', 'b', 'c']>  // 'a' | 'b' | 'c'
10. Last
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Last<T extends any[]> = T extends [...any[], infer L] ? L : never;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Last<[1, 2, 3]>  // 3
11. Append
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Append<T extends any[], U> = [...T, U];
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Append<[1, 2], 3>  // [1, 2, 3]
12. StartsWith
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type StartsWith<S extends string, P extends string> = 
  S extends `${P}${string}` ? true : false;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = StartsWith<'typescript', 'type'>  // true
13. TrimLeft
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type TrimLeft<S extends string> = S extends ` ${infer R}` ? TrimLeft<R> : S;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = TrimLeft<'   hello'>  // 'hello'
14. TrimRight
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type TrimRight<S extends string> = S extends `${infer R} ` ? TrimRight<R> : S;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = TrimRight<'hello   '>  // 'hello'
15. Trim
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Trim<S extends string> = TrimLeft<TrimRight<S>>;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Trim<'   hello   '>  // 'hello'
16. Replace
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Replace<S extends string, From extends string, To extends string> = 
  S extends `${infer L}${From}${infer R}` ? `${L}${To}${R}` : S;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Replace<'hello world', 'world', 'TS'>  // 'hello TS'
17. ReplaceAll
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type ReplaceAll<S extends string, From extends string, To extends string> = 
  S extends `${infer L}${From}${infer R}` ? ReplaceAll<`${L}${To}${R}`, From, To> : S;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = ReplaceAll<'a_a_a', '_', '-'>  // 'a-a-a'
18. CapitalizeWords
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type CapitalizeWords<S extends string> =
  S extends `${infer Head} ${infer Tail}`
    ? `${Capitalize<Head>} ${CapitalizeWords<Tail>}`
    : Capitalize<S>;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = CapitalizeWords<'hello world ts'>  // 'Hello World Ts'
19. ReverseTuple
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Reverse<T extends any[], R extends any[] = []> = 
  T extends [infer F, ...infer Rest] ? Reverse<Rest, [F, ...R]> : R;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Reverse<[1, 2, 3]>  // [3, 2, 1]
20. Flatten
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Flatten<T extends any[]> = 
  T extends [infer F, ...infer R]
    ? [...(F extends any[] ? Flatten<F> : [F]), ...Flatten<R>]
    : [];
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Flatten<[1, [2, 3], [[4]]]>  // [1, 2, 3, 4]
21. DeepReadonly
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type DeepReadonly<T> = {
  readonly [K in keyof T]: T[K] extends object ? DeepReadonly<T[K]> : T[K];
};
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Obj = { a: { b: { c: string } } };
type R = DeepReadonly<Obj>;
// { readonly a: { readonly b: { readonly c: string } } }
22. UnionToIntersection
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type UnionToIntersection<U> = 
  (U extends any ? (k: U) => void : never) extends 
  (k: infer I) => void ? I : never;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = UnionToIntersection<{a: 1} | {b: 2}>  // {a: 1} & {b: 2}
23. Permutation
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Permutation<T, K = T> =
  [T] extends [never] ? [] :
  T extends K ? [T, ...Permutation<Exclude<K, T>>] : never;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R = Permutation<'a' | 'b' | 'c'>
// ['a','b','c'] | ['a','c','b'] | ['b','a','c'] | ...
24. IsUnion
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type IsUnion<T, C = T> = 
  T extends any ? ([C] extends [T] ? false : true) : never;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R1 = IsUnion<string | number>  // true
type R2 = IsUnion<string>           // false
25. IsNever
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type IsNever<T> = [T] extends [never] ? true : false;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R1 = IsNever<never>  // true
type R2 = IsNever<string> // false
26. IsTuple
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type IsTuple<T> = 
  T extends readonly any[] ? number extends T['length'] ? false : true : false;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type R1 = IsTuple<[1, 2]>    // true
type R2 = IsTuple<number[]>  // false
27. Get<T, K> 类似 lodash.get
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Get<T, K extends string> = 
  K extends `${infer F}.${infer R}`
    ? F extends keyof T ? Get<T[F], R> : never
    : K extends keyof T ? T[K] : never;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Obj = { a: { b: { c: string } } };
type R = Get<Obj, 'a.b.c'>  // string
28. PickByValue
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type PickByValue<T, V> = {
  [K in keyof T as T[K] extends V ? K : never]: T[K];
};
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Obj = { name: string; age: number; gender: string };
type R = PickByValue<Obj, string>  // { name: string; gender: string }

最后

我也是边学边实现的,如果有啥错误的地方欢迎指正!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 萌萌哒草头将军 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
以ATT&CK为例构建网络安全知识图
随着攻击工具、方法的逐渐升级和复杂化,安全数据的大规模融合,攻防对抗愈加激烈。安全团队如何在浩瀚数据中有效发现高级威胁的蛛丝马迹,如何把网络安全专家的经验、知识有效转化为可复制可扩展的数据分析能力,如何将对抗高级威胁的“炼金术”逐步升级为科学淘金指南,如何将安全从业者从繁重的体力劳动中解放出来,愈发成为安全能力亟需突破的难点和重点,也是我们正在探索的方向。
绿盟科技研究通讯
2019/12/23
3.2K0
以ATT&CK为例构建网络安全知识图
​粉丝福利*3 |(第2版)《ATT&CK框架实践指南》正式发布
自《ATT&CK框架实践指南》首次发布以来,已过去了将近2年的时间。正如我们所知,ATT&CK每年都会更新2个版本,目前已更新至V13版本,在很多方面都发生了重大变化。在这段时间里,青藤也在探索 ATT&CK 的应用方面也积累了更为丰富的实践经验。鉴于此,我们出版了《ATT&CK框架实践指南》第2版,对ATT&CK相关内容做了大量更新。
亿人安全
2023/08/10
6090
​粉丝福利*3 |(第2版)《ATT&CK框架实践指南》正式发布
基于 ATT&CK 的 APT 威胁跟踪和狩猎
这是我在 BCS2019上演讲的议题的文字版,由于议题的时间限制后面内容基本都没有展开,所以再形成一个文字版本把一些想法再记录一遍,也是公开出来供业内同仁进行批判和探讨。
网络安全观
2021/02/26
1.4K0
MITRE ATT&CK 框架“入坑”指南
MITRE ATT&CK 框架是打造检测与响应项目的流行框架。这玩意有没有用不确定,但是你绝对承担不起不会用的风险。
网络安全观
2021/02/26
3.1K0
攻防最前线:ATT&CK模型解读
所谓 EDR 即 Endpoint Detection and Response (终端探测与响应)。EDR 和市场上常见的EPP( Endpoint Protection Platform)不同,EDR 更注重“探测”和“响应”。真实的网络攻击并不是一蹴而就的,往往伴随着多次不同的攻击,最后才能突破防御达成攻击目的。入侵一定会有痕迹,EDR 希望在最终灾难发生之前,通过对入侵方法的探测和及时高效的安全响应(警报、隔离等多种方式),将安全事故发生的几率降到最低。
FB客服
2020/12/08
3.2K0
攻防最前线:ATT&CK模型解读
基于MITRE ATT&CK的Red Teaming行动实践
如果要评选最近一年内国内信息安全圈最火的一个安全新名词,那一定是“MITRE ATT&CK”了。这个词在其被引入国内的那一刻起,就似乎备受青睐,常见于各种文章、PPT、演讲之中,大有赶超前几年的安全热词“威胁情报”之势。一时间造成了一种如果在2019年没听说过“MITRE ATT&CK”的安全从业人员不算是真正的业内人士的错觉。可是,物极必反,但凡被吹捧的越高往往跌的越惨,笔者私下里也在多个场合听到一些对“MITRE ATT&CK”被过度吹捧的反感言论,其实看待任何新鲜的事物和概念都需要冷静分析、客观思考、取其精华、去其糟粕,最后为我所用才是正道。
madneal
2019/11/28
9840
第47篇:ATT&CK矩阵攻击链分析-伊朗APT入侵美国政府内网(中篇)
大家好,我是ABC_123。前期分享了《伊朗APT组织入侵美国政府内网全过程揭秘(上篇)》,吸粉不少,谢谢大家。美国政府关于伊朗APT攻击事件的英文分析报告中给出了相关的ATT&CK矩阵列表,本篇文章就在此基础上,分享一下关于此次APT事件的ATT&CK矩阵攻击链分析,文中对很多网上的翻译错误进行了纠正。欢迎关注我的公众号"ABC123安全研究实验室"。
ABC_123
2023/02/24
8450
第47篇:ATT&CK矩阵攻击链分析-伊朗APT入侵美国政府内网(中篇)
企业安全 | ATT&CK框架概述
如果把乙方安全厂商和甲方运维服务的核心技术比作安全大脑,那么“右脑知攻、左脑知防”便是应对黑客攻击的最强大脑。
安全小王子
2021/01/27
3.9K0
企业安全 | ATT&CK框架概述
MITRE ATTCK 入门
最近ATT&CK这个东西太火了,直观的就是由attack变换而来,那么可能是跟攻击相关的了,但实际是不是呢?
用户1423082
2024/12/31
1810
600+历年攻防演练漏洞汇编!千起实战案例还原漏洞攻击链
传统的漏洞清单往往局限于漏洞描述和修复建议,忽视了漏洞在攻击链中的角色及其与其他攻击手段的联动作用。本报告通过对近千起真实攻防案例的深入分析,创新性地提出了“漏洞即战术”的动态分析模型。
释然IT杂谈
2025/04/04
1650
600+历年攻防演练漏洞汇编!千起实战案例还原漏洞攻击链
持续风险监测体系实践:基于ATT&CK的APT高频技术分析
ATT&CK作为一套反映网络安全攻击的知识模型,自2013年提出以来越来越受到安全行业的关注,已逐渐成为网络攻击事件分析的新标准,在众多APT事件分析中得到广泛应用。
FB客服
2021/03/09
1.2K0
持续风险监测体系实践:基于ATT&CK的APT高频技术分析
将MITRE ATT&CK模型应用于网络设备
信息安全社区经常忽视作为端点的网络设备。大多数人专注于保护系统和检测Windows域环境中的威胁,也包括检测运行MacOS和Linux系统的端点上的威胁。
FB客服
2019/12/10
1K0
将MITRE ATT&CK模型应用于网络设备
日志易UEBA|基于MITRE ATT&CK实现横向移动阶段失陷账户检测
1.1 横向移动阶段中,与账户相关的攻击行为,由于使用的是正常凭证,往往很难察觉。
日志易
2021/09/13
1.3K0
日志易UEBA|基于MITRE ATT&CK实现横向移动阶段失陷账户检测
浅谈ATT&CK:让“攻击手法”拥有通用语言
2019年3月的RSA 大会上,有超过10个议题讨论ATT&CK的应用,6月的Gartner Security & Risk Management Summit会上,ATT&CK被F-Secure评为十大关注热点。俨然,ATT&CK已经成为了2019年网络空间安全最热门的议题之一。
FB客服
2019/10/10
1.5K0
浅谈ATT&CK:让“攻击手法”拥有通用语言
攻击推理专题-基于攻击溯源图的威胁评估技术
攻击溯源意如其名,就是回答在网络攻防对抗中谁攻击了我,攻击点在哪以及相关攻击路径。通过攻击溯源技术可以确定攻击源或攻击的中间介质,以及其相应的攻击路径,以此制定更有针对性的防护或反制措施,实现主动防御。可见攻击溯源是网络空间防御体系从被动防御到主动防御的转换的重要步骤。
绿盟科技研究通讯
2020/12/14
3.2K0
攻击推理专题-基于攻击溯源图的威胁评估技术
终于等到你~ ICS工业控制系统的ATT&CK技术矩阵走来了
今天凌晨,IRTeam客服小哥在报复性熬夜的时候,发现朋友圈灯塔实验室的大佬发了一个动态->
IRTeam-工业安全
2022/05/10
7210
终于等到你~ ICS工业控制系统的ATT&CK技术矩阵走来了
首个针对工业控制系统(ICS)的ATT&CK知识库
1月7日,MITER发布了ATT&CK for ICS知识库,主要介绍了网络攻击者在攻击工业控制系统(ICS)时所使用的策略和技术,为关键基础设施和其他使用工业控制系统的组织评估网络风险提供了参考。
FB客服
2020/02/12
1.4K0
首个针对工业控制系统(ICS)的ATT&CK知识库
ATT&CK矩阵的攻与防
对于ATT&CK,我相信搞安全的师傅们都在熟悉不过了,ATT&CK把攻击者所运用的技术都以各种TTP展现出来了,如何将ATT&CK框架,更好的利用在我们的企业中,看似是一个简单的问题,实际操作却会出现许多无法意料的问题,就比如我们ATT&CK对应的计划任务,我们对应的规则应该怎么写,写完了规则的准确率是多少,误报率是多少,召回率是多少,写的规则是否真的能检测业务蓝军或者是入侵者,企业是否有支持ATT&CK运营的基础设施平台,ATT&CK运营人员的水位怎么样,因为你的规则匹配出了计划任务,但是仅凭借计划任务我们就能判断出改终端的行为是恶意的吗?不能这么草率吧,以及T1059.001的powershell,我们又打算如何设计我们的规则,是单纯的匹配恶意powershell文本的执行,比如powerspliot还是empire的脚本,还是根据powershell的功能来判断恶意行为?比如执行,下载,-bypass参数来匹配恶意行为,或者是直接套用微软的powershell语言限制模式,当然,这几种模式没有优劣之分,我们红军需要的是用已知的技术解决方案满足企业的安全需求,我们防守方的优势在于攻击者对于我们安全防线水位的未知 当然,我们企业红军所面临的蓝军或者攻击者,他们的攻击方式都是很简单致命的,就是一条攻击链路不会有没必要的攻击行为,这对于我们防守方来说,我们设计了很多规则,看似巧妙精密,但是还是会被企业的蓝军绕过,每次复盘都有许多能提升的水位,当然,废话了这么多,此篇文章仅是以笔者的攻防思路,输出自己对于ATT&CK矩阵的理解,文章尽量会按照以前的风格浅显易懂,如果有师傅对ATT&CK感兴趣,欢迎与我交流,可以邮箱联系我
红队蓝军
2022/07/06
9260
ATT&CK矩阵的攻与防
ATT&CK框架:攻击者最常用的TOP7攻击技术及其检测策略
之前,青藤云安全已经对ATT&CK进行了一系列的介绍,相信大家都已了解,Mitre ATT&CK通过详细分析公开可获得的威胁情报报告,形成了一个巨大的ATT&CK技术矩阵。诚然,这对于提高防御者的防御能力、增加攻击者的攻击成本都有巨大作用。但或许是出于猎奇心理,很多威胁情报报告更多地是在报道攻击者使用的比较新颖有趣的技术方法,而却忽视了攻击者反复使用的普通技术。这也是Mitre公司在2019年10月份的ATT&CKcon2.0大会上,推出了ATT&CK Sightings项目,以期借助社区力量收集更多直接观察数据的原因所在。
FB客服
2019/12/31
1.6K0
ATT&CK框架:攻击者最常用的TOP7攻击技术及其检测策略
ATT&CK驱动下安全运营数据分析的实用性挑战
ATT&CK(AdversarialTactics, Techniques, and Common Knowledge)是一个攻击行为知识库和威胁建模模型,主要应用于评估攻防能力覆盖、APT攻击防护、威胁狩猎、威胁情报关联及攻击模拟等领域。自发布以来,知识社区相当活跃,引发工业界和研究界的热捧,已逐渐发展为网络威胁分析语境下的通用元语。ATT&CK以相对适当的知识抽象层次,充分覆盖威胁领域的技战术场景,给安全防御能力的匹配与对比提供了标杆和抓手,是其成功的关键。在ATT&CK的驱动下,越来越多的数据源采集能力成为企业威胁防护的标配。不过,对于安全运营团队来说,大规模、规范化的采集数据的接入只是起点,如何利用数据对抗愈发隐匿的高级威胁行为,持续降低企业和组织的风险才是关键所在。本文将从实践出发,探讨总结ATT&CK驱动下安全运营数据分析的实用性挑战。
绿盟科技研究通讯
2020/11/04
1.2K0
ATT&CK驱动下安全运营数据分析的实用性挑战
推荐阅读
相关推荐
以ATT&CK为例构建网络安全知识图
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验