当前位置:网站首页>Wonderful use of TS type gymnastics string
Wonderful use of TS type gymnastics string
2022-07-06 07:29:00 【Jioho_】
TS Type gymnastics And Wonderful use of string
Here is a record of some ingenious string processing skills encountered in the process of doing questions , The main topic introduced later is 00529-medium-absolute
For the use of strings , The chapter of pre knowledge has been introduced , Examples are as follows . After understanding this part of the examples, I believe that many problems can be solved
type testInfer<T extends string> = T extends `${
infer F}${
infer S}${
infer R}` ? [F, S, R] : T
type testInfer1 = testInfer<'123456'>
// According to the characteristics of placeholders , front F and S To occupy separately 2 Characters , Give the rest R Occupied
// type testInfer1 = ["1", "2", "3456"]
// Make a little change , stay S Add a... After the placeholder 5
type testInfer2<T extends string> = T extends `${
infer F}${
infer S}5${
infer R}` ? [F, S, R] : T
type testInfer3 = testInfer<'123456'>
// F Occupy the first character = 1
// S occupy 2-4, Because in R There was one before 5, therefore S Represents the beginning of the second character to 5 All characters of
// that R It's from 5 Start , To the end , So the results are as follows :
// type testInfer1 = ["1", "234", "6"]
00529-medium-absolute Topic explanation
demand : Implement a receive string,number or bigInt Of type parameter Absolute type , Returns a positive string .
- receive string,number, perhaps bigInt
- Returns a positive integer
- Return string
Pick a few representative test cases
type testcase = Absolute<0>
type testcase = Absolute<-5>
type testcase = Absolute<'0'>
type testcase = Absolute<'-0'>
type testcase = Absolute<'10'>
type testcase = Absolute<-1_000_000n>
type testcase = Absolute<9_999n>
Their thinking
Ideas 1: A more circuitous idea
- First convert numbers into strings
- Compare string by string ( Use infer Extract each string , Then compare , After the comparison is successful, it is stored in a variable R in )
- When the incoming string is empty, the variable is returned R
Ideas 1 Realization :
type NumberStr = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
type Absolute<T extends number | string | bigint, R extends string = ''> = `${
T}` extends `${
infer F}${
infer Rest}`
? F extends NumberStr
? Absolute<Rest, `${
R}${
F}`>
: Absolute<Rest, R>
: R
among , When the incoming generic T May be number perhaps bigInt When it comes to type , It can't be used directly extends xxx
So the first trick is ${T}
Whether it is string type or not , All converted to strings ( This is also because numeric types can be converted to strings )
The rest is to compare character by character .
Ideas 2: Use digital features , such as 1_000_000n In procedure tostring In fact, it will be automatically converted to 1000000, We don't need to consider too much removal \_
perhaps Remove n
The logic of
Ideas 2 Realization :
type Absolute<T extends number | string | bigint> = `${
T}` extends `-${
infer Num}` ? Num : `${
T}`
This method directly matches whether the incoming content has -
Number
- If not , Description is a positive integer ( It could be numbers ) So wrap a layer `` Output directly as a string
- Yes
-
No , utilize infer and Properties of strings , Rule out the first -, The rest is the string corresponding to the number
Summary
- In the process of matching , have access to
${T}
The grammar of , hold number Also converted to string - Numeric type , Include bigInt In fact, the type conversion will be automatically converted to numbers , Using this feature, you can write less code
边栏推荐
- Supervisor usage document
- 成为优秀的TS体操高手 之 TS 类型体操前置知识储备
- 软件测试界的三无简历,企业拿什么来招聘你,石沉大海的简历
- Do you really think binary search is easy
- 1091: two or three things in childhood (multi instance test)
- Sharing of source code anti disclosure scheme under burning scenario
- Leecode-c language implementation -15 Sum of three ----- ideas to be improved
- Typescript interface properties
- TypeScript void 基础类型
- Brief explanation of instagram operation tips in 2022
猜你喜欢
jmeter性能测试步骤实战教程
Twelve rules for naming variables
Lesson 12 study notes 2022.02.11
TS 类型体操 之 循环中的键值判断,as 关键字使用
Leecode-c language implementation -15 Sum of three ----- ideas to be improved
Solution to the problem of breakthrough in OWASP juice shop shooting range
成为优秀的TS体操高手 之 TS 类型体操前置知识储备
Mise en œuvre du langage leecode - C - 15. Somme des trois chiffres - - - - - idées à améliorer
How Navicat imports MySQL scripts
Crawling exercise: Notice of crawling Henan Agricultural University
随机推荐
杰理之BLE【篇】
2022年Instagram运营小技巧简单讲解
navicat如何导入MySQL脚本
When the Jericho development board is powered on, you can open the NRF app with your mobile phone [article]
word删除括号里内容
#systemverilog# 可综合模型的结构总结
JDBC学习笔记
Openjudge noi 2.1 1749: Digital Square
Simulation of Teman green interferometer based on MATLAB
【JDBC】快速入门教程
TS 类型体操 之 循环中的键值判断,as 关键字使用
Simulation of holographic interferogram and phase reconstruction of Fourier transform based on MATLAB
Go learning --- use reflection to judge whether the value is valid
#systemverilog# 可綜合模型的結構總結
TypeScript 变量作用域
智能终端设备加密防护的意义和措施
剪映的相关介绍
1091: two or three things in childhood (multi instance test)
学go之路(二)基本类型及变量、常量
数字IC设计笔试题汇总(一)