当前位置:网站首页>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
边栏推荐
- After the hot update of uniapp, "mismatched versions may cause application exceptions" causes and Solutions
- TypeScript void 基础类型
- If Jerry needs to send a large package, he needs to modify the MTU on the mobile terminal [article]
- [JDBC] quick start tutorial
- 【JDBC】快速入门教程
- How to configure GUI guide development environment
- Google可能在春节后回归中国市场。
- Go learning --- use reflection to judge whether the value is valid
- Mise en œuvre du langage leecode - C - 15. Somme des trois chiffres - - - - - idées à améliorer
- Brief explanation of instagram operation tips in 2022
猜你喜欢
The best way to learn SEO: search engine
Sharing of source code anti disclosure scheme under burning scenario
杰理之开发板上电开机,就可以手机打开 NRF 的 APP【篇】
Go learning -- implementing generics based on reflection and empty interfaces
(4) Web security | penetration testing | network security web site source code and related analysis
NiO programming introduction
Summary of Digital IC design written examination questions (I)
TS 类型体操 之 extends,Equal,Alike 使用场景和实现对比
You deserve this high-value open-source third-party Netease cloud music player
Simulation of Michelson interferometer based on MATLAB
随机推荐
SSM学习
[online problem processing] how to kill the corresponding process when the MySQL table deadlock is caused by the code
C # connect to SQLite database to read content
jmeter性能测试步骤实战教程
多线程和并发编程(二)
Word setting directory
成为优秀的TS体操高手 之 TS 类型体操前置知识储备
C - Inheritance - hidden method
How can word delete English only and keep Chinese or delete Chinese and keep English
[computer skills]
软件测试界的三无简历,企业拿什么来招聘你,石沉大海的简历
Bloom taxonomy
TypeScript 变量作用域
杰理之普通透传测试---做数传搭配 APP 通信【篇】
Rust language - receive command line parameter instances
C语言 简单易懂的高精度加法
Brief explanation of instagram operation tips in 2022
剪映的相关介绍
Jerry needs to modify the profile definition of GATT [chapter]
Summary of Digital IC design written examination questions (I)